Hibernate session.get(..) 方法没有命中数据库

标签 hibernate

Hibernate 新手。 我只是想了解 session.get() 方法“如果对象已被缓存,则避免数据库命中”

List<Employee> employees1 = session.createCriteria(Employee.class).list();

Main main = new Main();
try {
    synchronized (main) {
        main.wait(10000);
    }
} catch (InterruptedException e) {e.printStackTrace();}

Employee  employees2 = (Employee)session.get(Employee.class, new Long(1));
System.out.println(employees2.getFirstname() + " , "+ employees2.getLastname() );
  1. 在第一行中,我得到了一个名字为“Kevin”的记录,姓氏为“Papad”

  2. 在等待的过程中,我访问了数据库并将名字更改为“steve”

  3. session.get() 没有访问数据库并让我将名字值设为“Kevin”,将姓氏设为“Papad”,这是错误的。

我一直在等待,因为任何人都可以同时更改数据库中的值(在上面的第 1 步和第 3 步之间),在这种情况下,我如何才能在第 3 步中获得正确的值?即,“史蒂夫”的名字

我需要对我的代码进行哪些更改?

如果我的理解/方法有误,请指正。

最佳答案

您可以使用要重新加载的实体调用 session.refresh(Object)http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#objectstate-loading

注意:Javadoc中有警告关于这个的用法,看这个thread进行讨论。

关于Hibernate session.get(..) 方法没有命中数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17100624/

相关文章:

java - 如何覆盖 Spring Data JPA 存储库基本方法?

java - 如何使用 lombok 注释从 jpa 实体注释获取字段值?

mysql - MySQL 中的行位置

java - 在自动触发默认监听器之前触发 Hibernate 自定义事件监听器

java - xdoclet 与 xdoclet2?

java - 如果事务回滚,CompassGps 会回滚吗?

java - Hibernate搜索依赖异常java.lang.AbstractMethodError : null

java - 为什么 Spring 存储库的 save() 有时会保存不相关的实体?

java - 默认情况下,如何为特定实体打开 hibernate 过滤器?

java - Spring Boot Mongo DB .yml 配置