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

时间:2013-08-14 10:55:19

标签: jpa eclipselink

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

下面示例中的父对象被缓存,但每次添加一个Child对象时,它都会执行SELECT然后执行INSERT。由于父对象已经被缓存,所以SELECT似乎是不必要的。

我的班级def在下面。 OneToMany设置为级联ALL。

班级家长      - 列出childern;

非常感谢。

1 个答案:

答案 0 :(得分:1)

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

请包含您的代码,包括您正在执行的操作和SQL日志。

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

如果它是现有对象,则必须选择当前副本以了解已更改的内容。通常它将在共享缓存中,并且不会发生选择。如果您已禁用共享缓存,或者该对象从未在此计算机上读取,或者从共享缓存中过期,则会发生选择。