无法使用时间戳从数据库加载hibernate对象

时间:2013-05-07 07:04:48

标签: mysql hibernate hql

我有一个带有复合主键的hibernate映射,该主键由多对一关联和时间戳组成。我想在创建一个新对象之前检查对象是否已经在数据库中。我的问题是我的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方法,但似乎没有任何工作。

DataCache.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。

1 个答案:

答案 0 :(得分:0)

问题与我的代码中的错误有关,其中myObject未从当前的hibernate会话加载。为了避免并发问题,我使用了两个会话,myObject实体加载到与我进行hql查询的会话不同的会话中。

我通过在当前会话中加载实体来解除异常:

myObject = (MyObject)db.get(MyObject.class, myObject.getId());