2009-11-03 82 views
0
@Entity 
@Table(name = "BOOKTEST") 
@NamedQueries({@NamedQuery(name = "Booktest.findAll", query = "SELECT b FROM Booktest b"), @NamedQuery(name = "Booktest.findById", query = "SELECT b FROM Booktest b WHERE b.id = :id"), @NamedQuery(name = "Booktest.findByBookName", query = "SELECT b FROM Booktest b WHERE b.bookName = :bookName")}) 
public class Booktest implements Serializable { 
@ManyToOne 
    private Topictest topictestId; //foreign key 
    @JoinColumn(name = "USERTEST_ID", referencedColumnName = "ID") 
    @ManyToOne 
    private Usertest usertestId; //foreign key 
} 

當我執行hibernate如何創建createalias左連接?

session.createCriteria(Booktest.class).createAlias( 「usertestId」, 「usertestId」,Criteria.LEFT_JOIN) .LIST();

的SQL_LOG仍呈現SELECT * FROM booktest,usertest而不是SELECT * FROM booktest左連接usertest做剩下多少加入?

試圖不sequitor這兩種情況下,我仍然得到以下沒有「左連接」

Hibernate: select this_.ID as ID13_2_, this_.BOOK_NAME as BOOK2_13_2_, this_.TOP 
ICTEST_ID as TOPICTEST4_13_2_, this_.USERTEST_ID as USERTEST3_13_2_, usertestid1 
_.ID as ID14_0_, usertestid1_.TOPIC_NAME as TOPIC2_14_0_, usertest4_.ID as ID15_ 
1_, usertest4_.USER_NAME as USER2_15_1_ from BOOKTEST this_, TOPICTEST usertesti 
d1_, USERTEST usertest4_ where this_.TOPICTEST_ID=usertestid1_.ID and this_.USER 
TEST_ID=usertest4_.ID(+) 

回答

1

試試這個

session.createCriteria(BookTest.class) 
      .createAlias("topictestId", "usertestId") 
      .setFetchMode("topictestId",FetchMode.EAGER) 
      .list(); 

理論上這應該工作,如果不嘗試沒有走樣。

+0

不sequitor,請看看我上面的結果,仍然沒有 「左連接」 – cometta 2009-11-03 03:03:51

+1

了'(+)'使其成爲一個'左join'請參見http:// WWW .dba-oracle.com/tips_oracle_left_outer_join.htm您必須使用Oracle 8i – 2009-11-03 04:18:55

+0

,因爲它使用ws oracledialect進行休眠。我改成了oracle9dialect。現在可以。 – cometta 2009-11-03 04:26:56