是否可以以在会话中不会查询对象两次的方式配置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,否则它赢了' 抛出这个错误。