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() );
在第一行,我得到一个名字为'Kevin'姓氏为'Papad'的记录
在等待的时候我去了数据库并将名字改为'史蒂夫'
session.get()
没有击中数据库,并且将值为firstname的'Kevin'姓氏称为'Papad',这是错误的。
我一直在等待,因为任何人都可以同时更改数据库中的值(在第1步和第3步之间),在这种情况下如何在第3步中获得正确的值?即,'steve'的名字
我需要对代码进行哪些更改?
如果我的理解/方法有误,请纠正我。
答案 0 :(得分:0)
您可以使用要重新加载的实体调用session.refresh(Object)
。 http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#objectstate-loading