有什么方法可以删除特定命名查询的缓存?我真的不想删除所有查询...还是有其他解决方法?
即使我使用普通的Query类,它也不起作用...
我正在使用休眠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”。null ...为什么?
我认为这是缓存模块(因为如果我将提供程序设置为eclipselink,它将按预期工作)...
我正在使用休眠模式进行搜索。
最佳答案
使用EclipseLink,您可以执行以下操作:
Query query = em.createNamedQuery("Users.findByUsername");
query.setHint("javax.persistence.cache.storeMode", "REFRESH");
对于休眠,提示是:
org.hibernate.cacheMode
“为此查询覆盖缓存模式(例如CacheMode.REFRESH)”为了进一步阅读和理解:old article