2010-10-03 95 views
1

MyTable是我的Oracle DB中的一個表,它有一個CMP_ID來加入公司表。hibernate ManyToOne爲什麼會生成2個查詢而不是1個查詢?

這裏是Java實現:

public class MyTable implements Serializable { 
... 
@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumns({ @JoinColumn(name = "CMP_ID", referencedColumnName = "CMP_ID", nullable = false) }) 
@XmlTransient 
Company company; 
... 
} 

在我的JSP頁面中,我設法顯示的MyTable:

${MyTable.company.cmpName} 

但是Hibernate生成2種選擇: 一個爲MyObject的,和另一一個是公司的名字。

如何在只有一個查詢中使用Hibernate獲取所需的所有信息? (在MyTable的所有領域,加上在公司表中的公司名稱)

謝謝

回答

1

如果你不想使用自定義查詢,建立的數據抓取策略急於

@ManyToOne(fetch=FetchType.EAGER) 
@JoinColumn(name="CMP_ID", referencedColumnName="CMP_ID", nullable=false) 
private Company company; 

只是一個建議:喜歡,如果你有一個以上的@JoinColumn使用@JoinColumns。否則,只需使用@JoinColumn。請記住,HQL查詢會覆蓋默認的抓取策略。

0

就是這樣冬眠的作品。有關更多信息,請參見http://www.javalobby.org/articles/hibernate-query-101/

+0

所以,如果我讀得不錯,改變這種行爲的唯一方法是使用自定義查詢?沒有其他選項/註釋? – guigui42 2010-10-03 13:45:38

+0

您也可以在查詢中使用左連接,但我不認爲懶惰獲取會起作用。 – BillThor 2010-10-03 23:27:06

相關問題