【问题标题】:hibernate createQuery bug?休眠 createQuery 错误?
【发布时间】:2011-12-03 17:20:42
【问题描述】:

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

即使我使用的是普通的 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”又是……空……为什么?

我认为它是缓存模块(因为如果我将我的提供程序设置为 eclipselink,它会正常工作)...

我正在使用休眠进行搜索..

【问题讨论】:

    标签: java hibernate caching jakarta-ee jpa


    【解决方案1】:

    使用 EclipseLink,您可以做到这一点:

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

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

    【讨论】:

    • 不客气 :) 无论如何,这里是休眠查询提示的参考:link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多