是否可以通过配置来阻止org.hibernate.NonUniqueObjectException?

时间:2018-03-22 08:37:52

标签: java hibernate orm

是否可以以在会话中不会查询对象两次的方式配置Hibernate?

保存对象时,我有时会收到错误Hibernate Error: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session

这意味着Hibernate为同一个实体返回两个不同的对象。是否有可能告诉Hibernate从每个实体保存缓存并返回已经查询过的缓存对象?

这会阻止org.hibernate.NonUniqueObjectException

编辑:

我的问题是会话在两个查询之间关闭。请参阅下面的示例代码:

Session hibernateSession = FactoryBuilder.getCurrentSession();

// First request starts
hibernateSession.beginTransaction();
Car car1 = getById(Car.class, 4);
hibernateSession.getTransaction().commit();
// First request ends

// Second request starts
Car car2 = getById(Car.class, 4);
car2.setName("My new name 2h");
saveOrUpdate(car2);

car1.setName("My new name 1y");
saveOrUpdate(car1);
// Second request ends

背景是,在执行请求后,hibernate会话被关闭,但为了提高性能,Car对象被保存在内存中。

当下一个请求到达服务器时,Hibernate不会返回内存中的Car对象。相反,Hibernate会从数据库中获取新的Cars,从而导致错误。

有没有办法配置Hibernate来返回这些对象? Hibernate知道这些objets,否则它赢了' 抛出这个错误。

0 个答案:

没有答案