0

OneToMany 関係を含むエンティティがあり、熱心なフェッチがあり、2 番目のエンティティがあります。この 2 番目のエンティティには、3 番目と 4 番目のクラスへの 2 つの OneToOne 関係があり、熱心なフェッチも行われます。OneToOne 関係は一方向です。

「エンティティから」を HQL として送信する DOM4J セッションから createQuery() を呼び出しています。リターンでは、2 番目のエンティティを取得しますが、完全なコンテンツではなく、3 番目と 4 番目のエンティティの ID のみが含まれています。私には、これらの 3 番目と 4 番目のエンティティが熱心にフェッチされていないように見えます。コードを正確に再現することはできませんが、最も関連性の高い部分を次に示します。

@Entity
public class Event extends EventParent {
   @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
   @JoinColumn(name="eventId")
   @org.hibernate.annotations.Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
   private Set<Pair> pairs=new HashSet<MarPair>();
}

@Entity
public class Pair extends PairParent {
   @OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
   @org.hibernate.annotations.Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
   private Info info;

   @OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
   @org.hibernate.annotations.Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
   private Results results;
}

@Entity
public class Info {
   private String name;
   private Date time;
}


@Entity
public class Results {
   private String name;
   private Date time;
}

最後に、クエリに使用しているコードを次に示します。

public void retrieve() {
   String hqlQry = "from Event";
   Session session = dom4JSessionFactory.getCurrentSession();
   Session dom4jSession = session.getSession(EntityMode.DOM4J);
   List results = dom4jSession.createQUery(hqlQuery).list();
}

前述したように、このクエリから、info および results テーブルから取得される実際のデータではなく、info および results テーブルのキーである info および results の値の整数が返されます。

関連情報:

  • 春 2.5.4
  • 休止状態 3.2.6
  • Hibernate アノテーション 3.3.1.GA
  • dom4JSessionFactory はタイプ org.springframework.orm.hibernate3.LocalSessionFactoryBean です
  • エンティティ「イベント」は、実際にはクラス階層の 7 番目のクラスです (これが重要かどうかはわかりません)。

必要がないことを願って、多くの情報を省略しました。それが機能しない理由について推測する必要があるものが他にある場合は、私に知らせてください。

4

1 に答える 1

0

これは、使用している Hibernate バージョンのバグであることが判明しました。私がしなければならなかったことは、Hibernate が HBM ファイルを生成した後で、embed-xml を true に変更することでした。これは、「置換」アリ機能を使用して行われました。

于 2011-06-28T15:32:16.367 に答える