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

时间:2013-06-14 03:27:41

标签: 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. 在等待的时候我去了数据库并将名字改为'史蒂夫'

  3. session.get()没有击中数据库,并且将值为firstname的'Kevin'姓氏称为'Papad',这是错误的。

  4. 我一直在等待,因为任何人都可以同时更改数据库中的值(在第1步和第3步之间),在这种情况下如何在第3步中获得正确的值?即,'steve'的名字

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

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

1 个答案:

答案 0 :(得分:0)

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

注意:Javadoc中有关于此用法的警告,请参阅此thread进行讨论。