0

2 つの異なるテーブルから集計およびグループ化するクエリがあります。

SELECT co.name AS companyName, f.destination_id, COUNT(f.id) AS numberOfFlights FROM companies co INNER JOIN flights f ON co.c_id = f.company_id GROUP BY co.id, co.name , f.destination_d

そして、名前付きクエリとしてxmlマッピングファイルに保存したいと思います。私の質問は次のとおりです。 1. ご覧のとおり、すべての結果フィールドがテーブルの実際の列であるとは限りません。どうすればそれをマップ ファイルに伝えることができますか? 2. compant.hbm.xml または flight.hbm.xml のどちらの xml に保存する必要がありますか、または hibernate.cfg.xml に保存する方法はありますか?

Web で高度な例を検索しましたが、この種の複雑さに一致するものは見つかりませんでした (それほど複雑ではありませんが...)。

誰かが私が学ぶことができる良い例を提供してくれますか、または私自身を導くことができますか?

4

3 に答える 3

3

質問 1 については、ResultTransformer をご覧ください。クエリの結果と同じ名前の Bean を作成し、次のように Transformers.aliasToBean 呼び出しで ResultTransformer に渡すだけです: Hibernate: Mapping custom column names in stored procedure named query

質問 2 については、少なくとも私たちのプロジェクトでは、名前付きクエリをクエリのみを含む XML ファイルに入れ、次の行で hibernate.cfg.xml から参照しています。

<mapping resource="queries.hbm.xml" />
于 2011-07-18T20:04:13.780 に答える
1

Hibernate でもサポートされていると思われる JPA を使用し、META-INF の下の適切なディレクトリに XML ファイルを作成し、persistence.xml から参照します。

<persistence-unit name="xxx">
    <jta-data-source>jdbc/xxx</jta-data-source>
    <mapping-file>META-INF/jpql/Xxx.xml</mapping-file>

カウントなどの「余分な」データがある場合、適切なcnmstructorで結果クラスを定義してから使用することがよくあります

  select new MyClass( thing, computedValue etc ...)

私のクエリで。Hibernate はそのアプローチをサポートしているようです。

于 2011-07-18T07:52:46.780 に答える
0

XMLマッピングを使用する場合、または注釈付き(http://download.oracle.com )を使用する場合は、名前付きクエリをHibernateマッピングファイル(http://www.javalobby.org/java/forums/m91885316.html )に入れることができます。アノテーションを使用している場合は、/javaee/6/api/index.html?javax/persistence/NamedQuery.html )。

別のオプションは、特にクエリ内の要素を他のマッピングと結合している場合、データベースを作成して、Hibernateでマップを表示することです。

于 2011-07-18T11:08:32.750 に答える