1

Hibernateマッピングファイルでは、プロパティ式を使用して任意の値を取得します。

<property name="price" type="double" formula="(select SUM(amount) ...) />

ただし、1行しか取得できません。行のリストを取得するにはどうすればよいですか?「プロパティ」は適切ではないことは理解していますが、セットやリストに数式を追加することはできません。

もちろん、新しいクラスを追加せずに値を取得したいだけです。私はSQLリクエストを持っており、既存のクラスのリストまたはセットを取得することを期待しています。

4

3 に答える 3

1

式のプロパティは、現在の行でのみ機能します。集計関数を実行する場合は、それらを取得するための特定のクエリを作成する必要があります。集計関数を処理する hibernate ドキュメントのセクションを参照してください。

于 2009-10-28T11:40:45.160 に答える
1

数式が複数の行を返す場合は、ステートメントをエンティティ識別子にリンクする必要があります。次に例を示します。

table .identifier = entity_identifierのテーブル から列名を選択します

これを一連の値に適用することに関しては、関数によるグループが適用できるかもしれません。たとえば、mysql の group_concat を使用して、値のリストを表示したことがあります。その悪い点は、数式が mysql ネイティブの方言に結合されていたことですが、うまくいきました。

于 2010-12-01T23:11:43.617 に答える
0

数式は、単一値のプロパティにのみ適用されます。コレクションではありません。ただし、コレクションのロードに使用するカスタム SQL ステートメントを指定することはできます。

doubleここで難しいのは、あなたの質問から、エンティティではなく要素 (価格) のコレクションが必要なように聞こえることです。そのようなものにカスタムローダーを指定しようとしたことは一度もないので、それが機能するかどうかはわかりません。ドキュメントはその問題についてかなり沈黙しています。

上記が機能しない場合、別のオプションSELECTとして、ビューとして定義し、コレクションをそのように (要素のコレクションとして) マップすることもできます。

skaffman最後に、提案されているようなクエリを実行することもできます。そのクエリを呼び出して、必要に応じて手動でエンティティにコレクションを設定する必要があります (たとえば、エンティティが読み込まれた後の DAO 内) 。適切なリスナーを定義してそこで実行できます。

于 2009-10-28T17:25:45.350 に答える