java - 如何使用 Hibernate session 提交非 session 对象

标签 java hibernate

Possible Duplicate:
Hibernate: different object with the same identifier value was already associated with the session

我正在使用 Hibernate 和 Struts 1。我的 Web 应用程序在一台计算机上运行,​​而我的 Hibernate 代码在另一台计算机上运行。我正在使用网络服务来访问数据库。我的问题是,当我尝试更新任何对象时,当我通过服务方法调用 commit 时,它会抛出“org.hibernate.NonUniqueObjectException”。

Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [..emp#2]

我无法找到问题所在,但我认为当我检索对象进行编辑时,它会附加到 Hibernate session ,然后当我尝试更新时,它会在服务端创建一个新对象,因为我正在反序列化该对象,因此可能有两个具有相同标识符的对象。

有人知道这可能会发生什么吗?

最佳答案

您需要merge在提交之前将分离的对象放回到 Hibernate Session 中。使用(旧的)HibernateUtil 类,您的代码将类似于:

final Session session = HibernateUtil.getInstance().getSessionFactory().getCurrentSession();
// ...
session.merge(entity);

另请参阅here .

关于java - 如何使用 Hibernate session 提交非 session 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9500708/

相关文章:

java - 具有抽象父类的 Hibernate 映射

java - 什么是 Hibernate 中的集合元素生命周期

hibernate - 在 Hibernate 中使用 @Query 进行带参数的 native 查询

spring - 如何在 Hibernate 中将 CLOB 数据类型转换为字符串?

java - 如何显示扩展 unicode > 0xFFFF?

Java 格式化程序 - '#' 有何用途?

java - 部署到 JBoss Application Server 7.1 时出现 HikariConnectionProvider ClassNotFoundException

Java EE 5 和 hibernate

java - 多个一对多关系的正确 hibernate 实现

java - 如何在 JUnit 测试中的不同线程中启动 Main.main()