Eclipselink 2.6.0 查询的目的 - SELECT ID FROM TBL WHERE ID=?
Purpose of Eclipselink 2.6.0 query - SELECT ID FROM TBL WHERE ID=?
有没有人知道为什么 JPA Provider - Eclipselink(使用版本 2.6.0)生成如下查询:
SELECT ID FROM OPERATION WHERE (ID = ?);
或
SELECT ID FROM SUBSCRIPTION WHERE (ID = ?);
为什么需要获取ID提供ID...
也许一级或二级缓存同步?
也许我的查询不准确......
在我的查询中,我从不直接要求执行 - 我使用 JPQL,从不要求提供一些 ID。
我有相当复杂的模型和查询,所以我认为提供完整代码没有意义(或者只有在你真的坚持但我认为这不会有太大帮助的情况下)。
使用 Oracle 12c 数据库。
我们在使用 EclipseLink 2.5.2 的 Java 应用程序中遇到了同样的问题。具体来说,每当我们插入一个与另一个实体有 M:1 关系的新实体时,我们就会看到它。一个简化的用例是:
A a = new A(); // the new entity
B b = lookupB(); // get existing entity from database
a.setB(b); // set M:1 relationship
em.persist(a); // save
在这种情况下,我们总是会看到对 B 的查询(即 SELECT ID FROM B WHERE ID = @
)。经过一些研究,我们将其追溯到 EclipseLink 在合并记录之前执行的 existence checking。
我们发现用 @ExistenceChecking(ExistenceType.ASSUME_EXISTENCE)
为 B 注释实体 class 阻止了 EclipseLink 运行 查询。
有关此的进一步讨论,请参阅此 related post。
有没有人知道为什么 JPA Provider - Eclipselink(使用版本 2.6.0)生成如下查询:
SELECT ID FROM OPERATION WHERE (ID = ?);
或
SELECT ID FROM SUBSCRIPTION WHERE (ID = ?);
为什么需要获取ID提供ID...
也许一级或二级缓存同步? 也许我的查询不准确...... 在我的查询中,我从不直接要求执行 - 我使用 JPQL,从不要求提供一些 ID。
我有相当复杂的模型和查询,所以我认为提供完整代码没有意义(或者只有在你真的坚持但我认为这不会有太大帮助的情况下)。 使用 Oracle 12c 数据库。
我们在使用 EclipseLink 2.5.2 的 Java 应用程序中遇到了同样的问题。具体来说,每当我们插入一个与另一个实体有 M:1 关系的新实体时,我们就会看到它。一个简化的用例是:
A a = new A(); // the new entity
B b = lookupB(); // get existing entity from database
a.setB(b); // set M:1 relationship
em.persist(a); // save
在这种情况下,我们总是会看到对 B 的查询(即 SELECT ID FROM B WHERE ID = @
)。经过一些研究,我们将其追溯到 EclipseLink 在合并记录之前执行的 existence checking。
我们发现用 @ExistenceChecking(ExistenceType.ASSUME_EXISTENCE)
为 B 注释实体 class 阻止了 EclipseLink 运行 查询。
有关此的进一步讨论,请参阅此 related post。