0

我有一个基于 Oracle10g (datasource) + Weblogic 10.3 + Eclipselink 的系统。

如果我通过带有 DAO 的 Java 软件插入或删除数据,所有数据都立即可用,但如果我手动插入数据(通过 SqlDeveloper 或使用 java.sql.Connection 类),则不会从数据库中获取新数据。
为什么会发生?以及如何解决?

4

1 回答 1

1

发生这种情况是因为 EclipseLink 无法意识到通过其他一些方法对数据库进行了更改。外部工具不会通知 EclipseLink 有关更改,并且 EclipseLink 并不总是轮询数据库内容以查找可能的更改。这样的实现会降低性能。通过 JPA 批量操作进行的更改也会发生同样的情况,例如 JPQL 和本机 SQL DELETE 和 INSERT 查询。

您无法真正解决问题,但是当您关闭共享缓存时,它会更容易解决。请注意可能会影响性能。

在 JPA 1 中:

<property name="eclipselink.cache.shared.default" value="false"/>  

在 JPA 2 中:

<shared-cache-mode>NONE</shared-cache-mode>

作为共享缓存的补充,EntityManager 也维护缓存。单个实体可以通过refresh方法从数据库中刷新。

于 2012-06-26T17:43:24.477 回答