hibernate createQuery bug?

时间:2011-10-08 20:49:22

标签: java hibernate caching java-ee jpa

有没有办法删除特定命名查询的缓存?我真的不想删除所有查询......或者还有其他解决方法吗?

即使我使用普通的Query类,它也无法正常工作......

我正在使用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”再次.. null ...为什么?

我在想它是缓存模块(因为如果我将我的提供者设置为eclipselink它正在按预期工作)......

我正在使用hibernate进行搜索..

1 个答案:

答案 0 :(得分:1)

使用EclipseLink,您可以这样做:

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

对于休眠,提示是:      org.hibernate.cacheMode“覆盖此查询的缓存模式(例如,CacheMode.REFRESH)” 进一步阅读和理解:old article