我有一个应用程序,它由多个用户通过网络使用,共享同一个MySQL数据库。因此,当其中一个对数据库进行更改时,另一个使用简单的刷新可以看到更改。
我正在使用EclipseLink (将缓存配置作为默认配置)。实际上,第二个用户(希望捕捉第一个用户所做的更改)必须重新启动应用程序(由Netbeans创建)。
更新:
这是我的persistence.xml中的配置。

发布于 2016-10-17 07:06:56
您的应用程序中可能有一些缓存保存从DB中检索到的previus值,因此您正在调用的sql不会转到DB,而是返回应用程序的本地缓存的结果。根据您的持续配置,查看如何禁用缓存的文档-它可能在ORM级别。
从EclipseLink文档中,如何禁用缓存:
默认情况下,EclipseLink允许共享对象缓存从数据库读取的对象,以避免重复的数据库访问。如果通过JDBC或其他应用程序或服务器直接更改数据库,则共享缓存中的对象将失效。
EclipseLink提供了几种处理陈旧数据的机制,包括:
Refreshing
Invalidation
Optimistic locking
Cache coordination还可以禁用共享缓存。这可以使用EclipseLink持久性单元属性来完成:
<property name="eclipselink.cache.shared.default" value="false"/>或者JPA2.0持久性单元元素:
<shared-cache-mode>NONE</shared-cache-mode>也可以使用@Cache注释选择性地启用/禁用:
@Entity
@Cache(isolation=ISOLATED)
public class Employee {
...
}或者JPA2.0 @Cacheable注释:
@Entity
@Cacheable(false)
public class Employee {
...
}不要通过将CacheType设置为None来禁用缓存,这会导致对象标识问题。
https://stackoverflow.com/questions/40079995
复制相似问题