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

相關問題