java - 如果我从代码中排除 session.evict() 会发生什么?

标签 java hibernate

我是 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/

相关文章:

java - 如何让 Hibernate 为新对象从 1 开始版本列?

java - Spring 3 MVC + MySQL : cannot store € character

java - 比较器 java <E>

java - 如何将文件添加到 EAR META-INF 文件夹 - Maven

java - 使用 JavaFX 的 ImageView Sprite 动画

java - 在类加载期间 memcpy 时 JVM 崩溃

java - 如何使用 Hibernate 加载实体列表以及这些实体的相关实体的子集?

java - Spring boot + JPA + Hibernate + Oracle 在应用程序启动期间不会自动创建表,并且日志中没有报告错误

java - 如何捕获 Marathon 中的弹出对话框?

hibernate - HQL:获取集合的最后一个元素