【问题标题】:hql dosenot see the updateshql 看不到更新
【发布时间】:2011-06-12 11:21:15
【问题描述】:

我有两个应用共享数据库 问题是,当从一个应用程序更新记录时,并且在从另一个应用程序进行 HQL 查询后,它不会获得新的更新,是通过缓存吗?

我们使用的技术
接缝,vaadin,jpa/hibernate

    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="hibernate.cache.provider_class"   value="org.hibernate.cache.EhCacheProvider" />
        <property name="hibernate.cache.use_second_level_cache"
            value="false" />
        <property name="hibernate.cache.use_query_cache" value="false" />

hql: 来自用户

【问题讨论】:

    标签: hibernate hql seam


    【解决方案1】:

    您的存储数据的方法是否使用@Transactional 或Seam 等价物进行了注释(或者,如果您使用的是程序化事务,您是在创建和提交事务)吗?我似乎记得没有@Transactional(使用Spring)将数据存储到数据库的方法不会导致异常或其他错误,但不会简单地将数据提交到数据库中。刷新事务/数据库会话也可能会有所帮助。

    【讨论】:

    • 数据已经提交。问题在被其他应用更新后召回查询
    • 您可以尝试 entityManager.clear()(如果使用 JPA EntityManager),或者如果在查询之前使用“原始”Hibernate 会话来强制清除一级缓存,则可以尝试 session.clear()。如果内存服务,JPA EntityManager 和 Hibernates 的 Session-object 也应该有 refresh(obj) -方法,它强制从数据库一路刷新,绕过一级和二级缓存。不使用缓存时,您可能会看到一些性能损失(可能非常小或非常高,具体取决于您的数据库使用情况、查询大小等)。
    猜你喜欢
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多