[java] HibernateネイティブSQLクエリーエンティティとコレクションの取得


Answers

以下は私のために働く:

session.createSQLQuery("select p.*, b.* from person p, book b where <complicated join>").
.addEntity("person", Person.class).addJoin("book", "person.books").list();

Personリストを含むObject[]を返します。それぞれにBookのリストが含まれています。 これは、単一のSQL selectでこれを行います。 私はあなたの問題は、あなたが何かに人を別名付けすることではないということです。

編集:このメソッドはObject []を返しますが、配列にはPersonインスタンスとPersonインスタンスのみが格納されます。

Hibernateがクラスへのマッピング方法を理解していない場合や、結合のマッピング方法を理解できない場合、Hibernateはオブジェクトのリストを返します。 各行に1つのPerson / Book組み合わせのみがあることを確認してください。

Question

これは私の状況です。単純な休止状態マッピングを与えた2つの基本POJOがあります。

Person
  - PersonId
  - Name
  - Books

Book
  - Code
  - Description

私のSQLクエリは、次のような行を返します。

PERSONID NAME       CODE DESCRIPTION
-------- ---------- ---- -----------
1        BEN        1234 BOOK 1
1        BEN        5678 BOOK 2
2        JOHN       9012 BOOK 3

私の休止状態のクエリは次のようになります:

session.createSQLQuery("select personid, name, code, description from person_books")  
       .addEntity("person", Person.class)
       .addJoin("book", "person.books")
       .list();

これはセクションごとです:休止状態のドキュメントの18.1.3: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/querysql.html#d0e17464 ://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/querysql.html#d0e17464

私が私のリストに入れることが期待されるのは、本のコレクションに含まれるブックオブジェクトを持つ2人のオブジェクトです:

List
 |- Ben
 |   |- Book 1
 |   '- Book 2
 '- John
     '- Book 3

私が実際に見ているのはこれです:

List
 |- Object[]
 |   |- Ben
 |   |   |- Book 1
 |   |   '- Book 2
 |   '- Book 1
 |- Object[]
 |   |- Ben
 |   |   |- Book 1
 |   |   '- Book 2
 |   '- Book 2
 '- Object[]
     |- John
     |   '- Book 3
     '- Book 3

私はこのメソッドを使用したいものを得ることが可能かどうか誰にも知っていますか?




person_booksの代わりにpersonテーブルにクエリを置くべきですか?

session.createSQLQuery("select * from person")  
   .addEntity("person", Person.class)
   .addJoin("book", "person.books")
   .list();



Related