热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

还是不习惯hibernate等框架

为什么80%的码农都做不了架构师?工作需要,现在已转入了java的ssh框架开发,上个星期给了我一个BUG,看似很能简

为什么80%的码农都做不了架构师?>>>   hot3.png

工作需要,现在已转入了java的 ssh 框架开发,上个星期给了我一个BUG,看似很能简单,但着实费了我一天的时间才解决,记录一下。

背景:原来的数据库表结构中,有一个ID字段,毫无疑问,这也自然充当了hibernate实体的@ID。在原有的环境中,没有问题。功能也是相当的基础:查看列表,双击一列,打开修改窗口,修改完成,点击保存。如教课书般的增删改查。

问题:现在有两个同样系统的数据,要合并,在合并后的数据库中表中,就出得了ID重复现在,自然,操作者们删掉了ID的主键,使得数据正常合并,现在要以ID 字段和另一个叫着SSDS的字段合并来确定唯一项(只是口头上告诉我们这样做)。现在的问题来了,但测试人员在保存一个修改的条目时,系统报错。

头大:这个想想都知道,并库出现的问题,没有考试到并库带来的问题。单步 debug,发现在保存的action中,先get(id) 了这条记录(代码是以前人写的,我也不清楚为什么这样做),因为现在只有一个id,不能唯一确定一值,所以hibernater报出了非唯一项错误。情理之中,但头大的问题来了,为什么打开编辑页面的时候,也有调用同样的方法get(id),却没有报错呢?整整一下午,没找到问题出在哪。

继续头大:今天上午,继续解决这个头大的问题,发现这样一个情况, 在打开编辑窗口的action中,大get(id),有一个getAllList()(也不明白,当时为什么要这样做),正是因为这一句,导致后一句get(id)不会出错,返回的是符合条件的第一件,而且,无论我怎么修改get  方法中的hql(加上  ssds = XXXX), 都没有生效,它只返回id对应的第一条记录。为什么,不得而知,我想是hibernate的缓存吧,也不会报错,只给我一个错误的结果。

解决:那接下来的情况就好办了,复合主键。
我用的是@IdClass,大致步骤如下:

1. 新建 复合主键的类 必须实现Serializable接口。
     必须有默认的public无参数的构造方法。
     必须覆盖equals和hashCode方法。equals方法用于判断两个对象是否相同,EntityManger通过find方法来查找Entity 时,是根据equals的返回值来判断的。本例中,只有对象的name和email值完全相同时或同一个对象时则返回true,否则返回false。 hashCode方法返回当前对象的哈希码,生成的hashCode相同的概率越小越好。

2.通过@IdClass注释在实体中标注复合主键
    如: @IdClass(CustomerPK.class)
    在两个字段的属性都加上 @Id

大致就是如此了... ...



转:https://my.oschina.net/zzop/blog/60894



推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
author-avatar
金针菇滚滚夹着五根水葱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有