我有一个应用程序,它由多个用户通过共享相同 MySQL 数据库的网络使用。所以当我们需要对数据库进行更改时,我们需要使用简单的刷新来查看更改。
我正在使用 EclipseLink (默认使用缓存配置)。 实际上,第二个用户(想要捕获第一个用户所做的更改)必须重新启动应用程序(由Netbeans创建)。
更新
以下是 persistence.xml 中的配置。
答案 0 :(得分:2)
您的applicaltion中可能存在一些缓存,其中包含从DB检索到的previus值 - 因此您调用的sql不会转到DB,而是返回应用程序本地缓存的结果。根据您的持久性配置,请查看文档如何禁用缓存 - 它可能在ORM级别。
来自EclipseLink文档的,如何禁用缓存:
默认情况下,EclipseLink允许共享对象缓存缓存从数据库读取的对象,以避免重复的数据库访问。如果直接通过JDBC或其他应用程序或服务器更改数据库,则共享缓存中的对象将过时。
EclipseLink提供了几种处理陈旧数据的机制,包括:
Refreshing
Invalidation
Optimistic locking
Cache coordination
也可以禁用共享缓存。这可以使用EclipseLink持久性单元属性来完成:
<property name="eclipselink.cache.shared.default" value="false"/>
或JPA 2.0持久性单元元素:
<shared-cache-mode>NONE</shared-cache-mode>
或者可以使用@Cache注释选择性地启用/禁用:
@Entity
@Cache(isolation=ISOLATED)
public class Employee {
...
}
或JPA 2.0 @Cacheable注释:
@Entity
@Cacheable(false)
public class Employee {
...
}
不要通过将CacheType设置为None来禁用缓存,这可能会导致对象标识问题。