我有一个包含多对一关联和时间戳的复合主键的休眠映射。我试图在创建新对象之前检查对象是否已经在数据库中。我的问题是我的 HQL 查询没有返回该对象,尽管它已经在数据库中,然后我保存的完全相同的值给了我:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:
我的 hql 查询是这样的:
db.createQuery("from DataCache dc where dc.myObject = :mo AND dc.timestamp = :date").setParameter("mo", this).setParameter("date", timestamp).uniqueResult();
查询没有时间戳部分。我试图将 TimestampType.INSTANCE 添加到 setParameter 方法,但似乎没有任何效果。
数据缓存.hbm.xml
<composite-id>
<key-many-to-one name="myObject" column="my_object" class="...MyObject" lazy="false"/>
<key-property name="timestamp" type="timestamp" column="timestamp"/>
</composite-id>
我正在使用 MySQL 5.6 和 Hibernate 4.1.9。