3

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 as 'Kevin' lastname as 'Papad' 这是错误的。

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

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

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

4

1 回答 1

0

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

注意:Javadoc中有一个关于这个用法的警告,请参阅这个线程进行讨论。

于 2013-06-14T05:32:31.857 回答