【发布时间】:2013-09-10 14:28:29
【问题描述】:
我知道@987654321@ 是Hibernate 使用的第一级缓存,一旦我们从session 检索到一个实体,随后的get 调用对相同具有相同标识符的实体从session而不是DB中获取,直到session打开。
话虽如此,我对hibernate如何将一级缓存与DB同步有疑问?考虑以下场景
//Lets say I have created the session
Session s1 = sessionFactory.getSession();
User u1 = s1.get(User.class, 1); //Getting User with ID=1
//s1 is not yet closed
//Lets say I create some other session
Session s2 = sessionFactory.getSession();
User u2 = s2.get(User.class, 1); //Getting User with ID=1
u2.setName("Abc"); // Changed a field
s2.save(u2); // Saved the changes to DB
s2.close(); //Closed the 2nd session
//Now when I once again retrieve User with ID=1 from s1, will I get updated User?
User u3 = s1.get(User.class, 1);// Here as per my understanding cache is used
所以我的问题是
- 既然
u3是从一级缓存中获取的,那么u3是否有更新值? - 如果有人在会话打开时直接更新 DB 并修改 User 对象,
session是否与 DB 同步?
提前感谢您在此线程上花费的时间和精力
【问题讨论】:
标签: java hibernate jpa hibernate-session