2

JPA アノテーションを使用して動的な @where 句を構成できるかどうかを知りたいです。company (親) と invoces (子) という 2 つのクラスの間に関係があるとします。

このような Annotation 宣言がある場合 (疑似コード)。

@ManyToOne
@JoinColumn(name = "ID_MEN_PRE", referencedColumnName = "ID_MEN"
@Where(clause="invoice_month=:month")
private Testinvoices invoice;

ここでやりたいことは、where 句で「月」の値を渡すことです。結果は、指定された日付までに Testinvoices のみを返す必要があります。

それを行う方法はありますか?

4

3 に答える 3

3

いいえ、ただし、フィルター (以下を参照) はパラメーター化できます。

ただし、実際にはクエリの方が優れたソリューションである場合に、関係をモデル化しようとしているように見えます。

または、データベース レベルで日付でフィルター処理されたビューを作成し、請求書をテーブルではなくそのビューにマップします。

17.1. ハイバネート フィルタ

Hibernate3 には、フィルター条件を事前に定義し、それらのフィルターをクラス レベルとコレクション レベルの両方でアタッチする機能があります。フィルター条件を使用すると、クラスやさまざまなコレクション要素で使用できる既存の "where" 属性と同様の制限句を定義できます。ただし、これらのフィルタ条件はパラメータ化できます。アプリケーションは実行時に、特定のフィルタを有効にするかどうか、およびそれらのパラメータ値をどのようにするかを決定できます。フィルターはデータベース ビューと同じように使用できますが、アプリケーション内でパラメーター化されます。

于 2013-10-15T15:27:42.140 に答える
1

実行時にパラメータを渡すことはできませんが、このように使用することは可能です

@ManyToOne
@JoinColumn(name = "ID_MEN_PRE", referencedColumnName = "ID_MEN"
@Where(clause="invoice_month=january")
private Testinvoices invoice;
于 2013-10-18T20:44:21.440 に答える