2013-04-10 83 views
1

如果你有这个实体交叉联接:JPA2标准:怎样避免使用path.get()

@Entity 
public class A { 

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

} 

而且我有标准的通用发电机谁都会做的:

Root<A> root = criteria.from(A.class); 
root.get("myBObject").get("aFieldInB"); 

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

我该怎么办是什么?

+0

尝试加入 B = root.join( “myBObject”,JoinType.LEFT); – user902383 2013-04-10 11:15:41

+0

当然我知道...但我的标准对象是生成的! – user1180339 2013-04-10 11:25:32

回答

0

您必须使用join()。总的来说,最好总是使用join()来进行关系。

见, http://en.wikibooks.org/wiki/Java_Persistence/Criteria#JoinType

+1

是的,我知道。但正如我所说,我有一个引擎来产生我的标准。此引擎接收一个Class对象(Root)和一个路径字符串(“myBObject.aFieldInB”)。路径无法预测! – user1180339 2013-04-10 13:50:57