1

MyTable は私の Oracle DB のテーブルで、COMPANIES テーブルに参加するための 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 つの SELECT を生成しました。1 つは MyObject 用で、もう 1 つは Company 名を取得するためです。

Hibernate を使用して 1 つのクエリだけで必要なすべての情報を取得するにはどうすればよいですか? (MyTable のすべてのフィールドと、Company テーブルの会社名)

ありがとうございました

4

2 に答える 2

1

カスタム クエリを使用したくない場合は、フェッチ戦略を EAGER に設定します。

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

アドバイス: 複数の @JoinColumn がある場合は、@JoinColumns を使用することをお勧めします。それ以外の場合は、@JoinColumn のみを使用してください。HQL クエリはデフォルトのフェッチ戦略をオーバーライドすることに注意してください。

于 2010-10-03T15:47:39.543 に答える
0

それが休止状態の仕組みです。詳細については、 http://www.javalobby.org/articles/hibernate-query-101/を参照してください。

于 2010-10-03T13:31:45.007 に答える