java - hibernate 。什么时候同一实体可以在一个 session 中加载两次?

标签 java hibernate

遇到这样的问题。加载了 2 个对象的集合(按主键,使用条件)。然后在循环中迭代它们。当处理第一个对象时,在离这个循环非常远的地方,通过与循环中第二个对象相同的主键加载对象。在这里,我看到这 2 个对象的 System.identityHashCode() 不同。当处理循环中的第二个对象并尝试保存它时,出现异常:

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:

尝试用简单的对象模拟这个问题,加载,修改,再次通过 PK 加载,用不同的事务传播保存我总是得到相同的对象实例...... 您能告诉我什么时候可以通过 PK 在同一 session 加载中获取第二个对象实例吗?

最佳答案

在我的情况下,问题是因为: 首先,我通过主键加载了一些实体“A”。 然后我使用一些标准加载了另一个实体“B”,这些标准通过 hbm 映射引用了这个相同的(通过 PK)实体“A”(例如 B-> 某些实体 C->A)并且 hibernate 没有'使用已经加载的 'A' 实体,但第二次加载或创建它(我在实体 'A' 构造函数中放置断点),因此在单个 session 中我们有 2 个具有相同 PK 但不同实例的实体。尝试保存实体“A”时出现异常“NonUniqueObjectException”。 加载实体“B”有些距离非常非常远,并且在某些情况下可以重现和识别问题。 为了更快地找到这些地方,很容易在“NonUniqueObject”构造函数中放置断点,并找到第二次加载该实体的人。 顺便说一下,在我加载实体“B”之后,我没有尝试调用 B->C->A,lazy='proxy' 或根本没有惰性,这意味着每个请求加载 C。对我来说有些神秘......

关于java - hibernate 。什么时候同一实体可以在一个 session 中加载两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20606568/

相关文章:

java - Springboot 1.4/单元测试时出错(hibernate AttributeConverter 注册多次)

java - 正则表达式包括所有西类牙字符和数字

java - 如何将 int 转换为在 textView 内设置

java - 在 hibernate 中多次调用插入?

java - Hibernate 标准和/或多对多

java - 如何使用 Hibernate for PostgreSQL 创建索引

spring - 如何在线程中访问 hibernate session ?

java - 如何等待后台进程在android中完成

java - "Serializable"接口(interface)背后的基本原理是什么?

java - 使用java中的日历类同步服务器时间