休眠非唯一对象异常

Posted

技术标签:

【中文标题】休眠非唯一对象异常【英文标题】:Hibernate NonUniqueObjectException 【发布时间】:2017-02-01 08:08:59 【问题描述】:

我在休眠中遇到 NonUniqueObjectException

有一个 Item 类,我使用 hibernate 的 session.save 保存了 Item 对象的列表。

现在在同一个事务中,我正在尝试使用与另一个表连接的原始 sql 查询来更新相同的项目。这给了我 NonUniqueObjectException。我要加入的两个表作为休眠的实体是不相关的,即没有外键关系。

所以我有两个问题:

首先,有没有办法使用 hql 在 hibernate 中编写内部连接查询。 二、如何避免NonUniqueObjectException。

【问题讨论】:

请在查询中添加您的交易方式.. 请参阅docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/… 了解内部连接(第 14 章)。 还要检查***.com/questions/1074081/…,NonUniqueObjectException 的一些可能原因 @MaciejKowalski - 请参见代码 sn-p String sql = "UPDATE Item INNER JOIN BinItem" + "ON Item.itemId = BinItem.itemId " + "SET Item.itemStatus = :itemStatusParam " + "WHERE BinItem.binId = :binIdParam";查询查询 = getSession().createSQLQuery(sql); query.setParameter("itemStatusParam", status.toString()); query.setParameter("binIdParam", binId); return query.executeUpdate(); @user1211 - 没有帮助,因为实体不相关。 【参考方案1】:

其中一件事是在进行任何原始 sql 查询之前清除会话。欢迎任何更好的方法。

【讨论】:

以上是关于休眠非唯一对象异常的主要内容,如果未能解决你的问题,请参考以下文章

用于可迭代对象的 Java GraphQL 解析器:休眠异常

MySQL 交叉联接查询上的休眠异常

异常 ORA-00942: 表或视图不存在 - 使用休眠会话插入现有表时

打开会话的休眠异常。我该如何调试呢?

MySQL休眠异常

休眠映射异常:实体映射中的重复列