我需要让hibernate只保存未经存在的对象。如果此对象已被持久化,则hibernate必须不执行任何操作或者使持久化对象的id变为鲁棒。 cource equals()和hashCode()方法是owerriden并且工作正常。 我可以通过配置或类似插入前监听器之类的方式来实现吗? 例如:
session.beginTransaction();
ElementToPersist element = new ElementToPersist();
element.setName("Element");
element.setValue("Value");
session.save(element);
session.getTransaction().commit();
session.beginTransaction();
ElementToPersist element2 = new ElementToPersist();
element2.setName("Element");
element2.setValue("Value");
session.save(element2);
session.getTransaction().commit();
在我的情况下,两个元素将以不同的id持久化。在插入之前如何让hibernate检查这个元素的存在?你能表现出最好的实践吗? 谢谢。
答案 0 :(得分:4)
使用查询检查数据库中是否存在元素,并仅在不存在时插入元素。请注意,这应该由数据库约束强制执行,因为如果两个事务检查并同时插入相同的元素,则可能存在竞争条件。