有什么方法可以删除特定命名查询的缓存?我真的不想删除所有查询...还是有其他解决方法?

即使我使用普通的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

10-06 03:26