多くの人が1つではなく2つのクエリが生成される理由
-
27-09-2019 - |
質問
MyTableは私のOracle DBのテーブルです。CMP_IDが会社のテーブルに参加するためのCMP_IDがあります。
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つの選択を生成しました。1つはMyobject用、もう1つは会社名をFecthするためです。
Hibernateを使用して1つのクエリのみで必要なすべての情報を取得するにはどうすればよいですか? (MyTableのすべてのフィールド、および会社テーブルの会社名)
ありがとうございました
解決
カスタムクエリを使用したくない場合は、 フェッチング戦略を熱心に設定します
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="CMP_ID", referencedColumnName="CMP_ID", nullable=false)
private Company company;
ただアドバイス:複数の@Joincolumnがある場合は、@Joincolumnsを使用することを好みます。それ以外の場合は、Just @joincolumnを使用します。 HQLクエリがデフォルトのフェッチング戦略をオーバーライドすることに留意してください。
他のヒント
それが冬眠の仕組みです。見る http://www.javalobby.org/articles/hibernate-query-101/ 詳細については。
所属していません StackOverflow