0

如何防止 EclipseLink/JPA 在每次 INSERT 之前执行 SELECT?

下面示例中的父对象被缓存,但每次添加子对象时,它都会执行 SELECT 然后执行 INSERT。SELECT 似乎没有必要,因为 Parent 对象已被缓存。

我的班级定义如下。OneToMany 设置为级联 ALL。

父类 - 列出子类;

非常感谢。

4

1 回答 1

1

EclipseLink 不会在每次 INSERT 之前执行 SELECT,并且默认情况下会启用共享缓存。

请包括您的代码,包括您在做什么和 SQL 日志。

我的猜测是您正在使用merge()?通过合并,被合并的对象可以是新的或现有的,如果它有一个空 id 或 0 id(取决于配置),它将假定是新的并且不会发生选择。如果它具有非空 id 并且是新的(不使用生成的 id),则必须进行选择。考虑使用生成的 id,或调用 persist() 而不是 merge()。

如果是现有对象,则必须选择当前副本才能知道发生了什么变化。通常它将在共享缓存中,并且不会发生选择。如果您禁用了共享缓存,或者对象从未在这台机器上读取过,或者从共享缓存中过期,则将发生选择。

于 2013-08-14T14:55:17.117 回答