我是 hibernate 新手。我想知道我们是否有 session.evict() 的替代方案。 我已经评论了该行,并且我的逻辑运行良好。
最佳答案
session.evict() 方法用于从与 session 关联的缓存中删除特定对象。因此,删除它会强制 hibernate 从数据库中获取对象,而不是查看缓存。示例
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
try
{
SomeEntity myEntity= (SomeEntity) session.load(SomeEntity.class, new Integer(1)); //look in cache (will not be found) if not found then fetch from database
System.out.println(myEntity.getName());
myEntity = (SomeEntity) session.load(SomeEntity.class, new Integer(1)); //look in cache(will be found) if not then fetch from database
System.out.println(myEntity.getName());
session.evict(myEntity); // will remove from cache
myEntity = (SomeEntity) session.load(SomeEntity.class, new Integer(1)); // object will again be fetched from database if not found in second level cache
System.out.println(myEntity.getName());
}
finally
{
session.getTransaction().commit();
HibernateUtil.shutdown();
}
编辑:Session.evict() 将从一级缓存中删除实体,并且从 session 中删除对象后,对对象的任何更改都不会保留。如果使用cascade="evict"映射关联,则关联的对象也将被分离。
希望对你有帮助!!
关于java - 如果我从代码中排除 session.evict() 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61517567/