休眠createQuery错误?

发布于 2024-12-08 14:23:17 字数 773 浏览 0 评论 0原文

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

即使我使用普通的 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 进行搜索。

Is any way to remove cache for a specific named query? I don't really want to remove for all queries... Or is there any other workaround?

It is not working even if I am using the normal Query class...

I am using hibernate 3.6, glassfish 3.1.1, this is an java ee application (code from ejb module)

I have something like this:

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
}

the second time I use "getUserByName" is again.. null... why?

I am thinking it's the cache module(because if I set my provider to eclipselink it's working as it should)...

I am using hibernate for it's search..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝颜夕 2024-12-15 14:23:17

使用 EclipseLink,您可以执行以下操作:

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

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

With EclipseLink you can do this:

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

For hibernate the hint is:
org.hibernate.cacheMode "Override the cache mode for this query ( eg. CacheMode.REFRESH )"
For further reading and understanding: old article

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文