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”
在等待的过程中,我访问了数据库并将名字更改为“steve”
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
关于Hibernate session.get(..) 方法没有命中数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17100624/