2010-12-11 39 views
3

只是一個簡短的問題,但是在這段代碼中是否需要刷新?請注意,這將位於JPA事務中。關於在查詢被調用之前使用JPA刷新的問題

User user = new User(); 
em.persist(user); 

em.flush; 

User aUser = em.find(User.class,user.getId()); 
assert(user.equals(aUser)); 

或者它會在沒有沖洗的情況下工作嗎?只要User有一個自動生成的ID需要

User user = em.find(User.class,id); 
user.setName("My Name"); 
em.merge(user); 

em.flush; //Is this line needed? 

User aUser = em.createQuery("select u from User where u.name = 'My Name'); 
assert(user.equals(aUser)); 

回答

7

在第一種情況下衝洗,因爲它不是刷新之前分配:

User user = new User(); 
em.persist(user); 

User aUser = em.find(User.class,user.getId()); 
assert(user.equals(aUser)); 

還是同樣的問題,而是一個涉及多一點的例子。如果沒有生成id,則em.find()將從持久化上下文中返回相同的實例,因此不需要刷新。

在第二種情況下,不需要顯式刷新,因爲在自動執行查詢之前JPA執行刷新(如果刷新模式是默認的AUTO,否則需要顯式刷新)。