【发布时间】:2013-06-14 03:27:41
【问题描述】:
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' lastname 作为 'Papad' 的值,这是错误的。
我一直在等待,因为任何人都可以同时更改数据库中的值(在上面的第 1 步和第 3 步之间),在这种情况下,我怎样才能在第 3 步中获得正确的值?即,“史蒂夫”的名字
我需要对我的代码进行哪些更改?
如果我的理解/方法有误,请纠正我。
【问题讨论】:
-
详情可以从线程stackoverflow.com/questions/8044963/…了解。该线程存在 get 和 load 方法的缺陷。
-
此外,休眠会话不是线程安全的,根据api建议,不建议长时间保持会话打开,每次工作后都应打开和关闭。
标签: hibernate