【问题标题】:Cannot load a hibernate object from database with timestamp无法从带有时间戳的数据库中加载休眠对象
【发布时间】:2013-05-07 07:04:47
【问题描述】:

我有一个包含多对一关联和时间戳的复合主键的休眠映射。我试图在创建新对象之前检查对象是否已经在数据库中。我的问题是我的 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。

【问题讨论】:

    标签: mysql hibernate hql


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-20
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 2012-10-03
      • 1970-01-01
      • 2013-09-23
      相关资源
      最近更新 更多