У меня есть сопоставление гибернации с составным первичным ключом, состоящим из ассоциации «многие к одному» и метки времени. Я пытаюсь проверить, находится ли объект уже в базе данных, прежде чем создавать новый. Моя проблема заключается в том, что мой запрос 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.