如何在每次INSERT之前阻止EclipseLink / JPA执行SELECT?
下面示例中的父对象被缓存,但每次添加一个Child对象时,它都会执行SELECT然后执行INSERT。由于父对象已经被缓存,所以SELECT似乎是不必要的。
我的班级def在下面。 OneToMany设置为级联ALL。
班级家长 - 列出childern;
非常感谢。
答案 0 :(得分:1)
EclipseLink在每次INSERT之前都不执行SELECT,并且默认情况下启用了共享缓存。
请包含您的代码,包括您正在执行的操作和SQL日志。
我的猜测是你正在使用merge()?通过合并,正在合并的对象可以是新的或现有的,如果它具有空id或0 id(取决于配置),它将假定为新的并且不会发生选择。如果它具有非空的id并且是新的(不使用生成的id),则必须进行选择。考虑使用生成的id,或调用persist()而不是merge()。
如果它是现有对象,则必须选择当前副本以了解已更改的内容。通常它将在共享缓存中,并且不会发生选择。如果您已禁用共享缓存,或者该对象从未在此计算机上读取,或者从共享缓存中过期,则会发生选择。