如何防止 EclipseLink/JPA 在每次 INSERT 之前执行 SELECT?
下面示例中的父对象被缓存,但每次添加子对象时,它都会执行 SELECT 然后执行 INSERT。SELECT 似乎没有必要,因为 Parent 对象已被缓存。
我的班级定义如下。OneToMany 设置为级联 ALL。
父类 - 列出子类;
非常感谢。
如何防止 EclipseLink/JPA 在每次 INSERT 之前执行 SELECT?
下面示例中的父对象被缓存,但每次添加子对象时,它都会执行 SELECT 然后执行 INSERT。SELECT 似乎没有必要,因为 Parent 对象已被缓存。
我的班级定义如下。OneToMany 设置为级联 ALL。
父类 - 列出子类;
非常感谢。
EclipseLink 不会在每次 INSERT 之前执行 SELECT,并且默认情况下会启用共享缓存。
请包括您的代码,包括您在做什么和 SQL 日志。
我的猜测是您正在使用merge()?通过合并,被合并的对象可以是新的或现有的,如果它有一个空 id 或 0 id(取决于配置),它将假定是新的并且不会发生选择。如果它具有非空 id 并且是新的(不使用生成的 id),则必须进行选择。考虑使用生成的 id,或调用 persist() 而不是 merge()。
如果是现有对象,则必须选择当前副本才能知道发生了什么变化。通常它将在共享缓存中,并且不会发生选择。如果您禁用了共享缓存,或者对象从未在这台机器上读取过,或者从共享缓存中过期,则将发生选择。