9

私はあまりにも簡単に思える問題に苦しんでいます:

セットアップは、Hibernate 3 で多対 1 の関係を持つ 2 つのエンティティです。

@Entity
class M {
  private N n;
  @ManyToOne(fetch = FetchType.LAZY)
  public N getN() { return n; }
  public void setN(N n) { this.n = n; }
}

@Entity
class N {
  private List<M> ms = new ArrayList<M>();
  @OneToMany(mappedBy="n")
  public List<M> getMs() { return ms; }
  public void setMs(List<M> ms) { this.ms = ms; }
}

簡単です。私のアプリケーションではM、あるNまたはない のリストがあります。このリストはh:dataTable、FK が null かどうかに応じて異なる列の内容を示す の入力です。しかし、m.getN() != nullこれをテストすると、休止状態がロードされますN。どうすればこれを回避できますか?

編集:コメントでJBNizetが指摘したように、これは実際には私のエラーです。少なくともこれを誰かの役に立ち、上記のレイアウトを維持するために、質問を「完全なエンティティをフェッチせずに、依存する Hibernate エンティティの外部キー列の値を取得するにはどうすればよいですか?」に言い換えました。Aaron Digulla の提案によると。

編集 2 : 新しい質問は、この質問の複製であることが判明しました:外部キー ID のみにアクセスするときに、Hibernate が結合されたエンティティをフェッチするのを防ぐにはどうすればよいですか? - それで、投票を締め切りますか?

4

2 に答える 2

1

M または M のいくつかのフィールドと、たとえば N の id を含むプロジェクション マッピングを作成します。

あなたのクエリは次のようになります

select new com.my.ProjectionObject(m, m.n.id) from M m where ...

于 2012-08-02T11:39:18.520 に答える
-1

Hibernateが知らないことをどのように伝えると思いますか?エンティティをロードしないと、Hibernateはそれが(まだ)存在するかどうかを知る方法がありません。

Hibernateの「エンティティマッパー」ボックスの外に出ると、データベースに直接クエリを実行して、たとえば、のNsの数を数えることができますM

于 2012-08-02T11:41:19.323 に答える