JPA2标准:如何避免使用path.get()进行交叉联接

use*_*339 5 java jpa criteria-api jpa-2.0

如果您有这个实体:

@Entity
public class A {

    @ManyToOne
    @JoinColumn(name = "bField", nullable = true)
    private B myBObject;

}
Run Code Online (Sandbox Code Playgroud)

我有一个Criteria的通用生成器,它将执行以下操作:

Root<A> root = criteria.from(A.class);
root.get("myBObject").get("aFieldInB");
Run Code Online (Sandbox Code Playgroud)

问题如下:生成的sql将包含A和B之间的CROSS JOIN。但是我希望生成的sql将包含A和B之间的LEFT JOIN。

我怎样才能做到这一点?

Jam*_*mes 3

您必须使用 join()。一般来说,最好始终使用 join() 来建立关系。

请参阅 http://en.wikibooks.org/wiki/Java_Persistence/Criteria#JoinType

  • 是的,我知道。但正如我所说,我有一个引擎来生成我的标准。该引擎接收一个 Class 对象(Root)和一个路径字符串(“myBObject.aFieldInB”)。路径无法预测! (3认同)