2011-10-08 84 views
0

有什麼辦法可以刪除特定命名查詢的緩存?我不想刪除所有查詢......或者是否有其他解決方法?hibernate createQuery的bug?

如果我使用的是正常的查詢類這是行不通的,甚至......

我使用Hibernate 3.6,GlassFish的3.1.1,這是一個Java EE應用程序(代碼從EJB模塊)

我有這樣的事情:

public User getUserByName(String username) { 
    try { 
     return (User) em.createNamedQuery("User.getUserByName").setParameter("username", username).getSingleResult(); 
    } catch (NoResultException e) { 
     return null; 
    } 
} 
//... 
if(getUserByName(entity.getUsername()!=null) { 
    em.persist(entity); 
} 
//... 
// username added in database (checked) 
if(getUserByName(entity.getUsername())==null) { 
    //something else 
} 

我第二次用「getUserByName」又是..空......爲什麼?

我想它的緩存模塊(因爲如果我把我的供應商的EclipseLink它的工作,因爲它應該)...

我使用冬眠它的搜索..

回答

1

用的EclipseLink可以做到這一點:

Query query = em.createNamedQuery("Users.findByUsername"); 
query.setHint("javax.persistence.cache.storeMode", "REFRESH"); 

對Hibernate的提示是: org.hibernate.cacheMode「覆蓋此查詢緩存模式(例如CacheMode.REFRESH。)」 進一步的閱讀和理解:old article

+0

謝謝。不知道這個..我會試一試。 – Alex

+0

不客氣:)無論如何,這裏是hibernate查詢提示的參考:[link](http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/objectstate.html#d0e1215) – zeller