1

ハードコードされた値でフィルター注釈を付ける方法があるかどうか疑問に思いました。itemRateとratemasterという2つのテーブルを結合しています。レートマスターには、アプリケーションのrateidとratekindidの複合キーがあります。レートの種類IDは、3つのID(プライマリ、コンポーネント、アイテムレート)の1つにすることができます。

My Item Rateテーブルはアプリケーションを認識し、2つの異なる列item_rateとrate(プライマリレート)を参照します。

私の質問は、休止状態でフィルターをハードコーディングする方法があるので、呼び出すgetRate()とレートの種類IDが0のgetItemRate()すべてのレートでフィルターされ、呼び出すとレートの種類IDが2のすべてのレートでフィルターされますか?

レートが0のレートマスターを取得するために、次のようなことを試みました。

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({
    @JoinColumn(name = "CIITM_RATE", nullable = false , updatable = false, insertable = false, referencedColumnName = "RATE"),
    @JoinColumn(name = "CIITM_APPLICATION", nullable = false , updatable = false, insertable = false, referencedColumnName = "APPLICATION") })
@FilterJoinTable(name = "kindId", condition="RATEKINDID = 0")
public Ciratemaster getRateMaster() {
    return rateMaster;
}

これにより、レートの種類が2のレートマスターを取得できます。

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({
    @JoinColumn(name = "CIITM_ITEM_RATE", nullable = false , updatable = false, insertable = false, referencedColumnName = "RATE"),
    @JoinColumn(name = "CIITM_APPLICATION", nullable = false , updatable = false, insertable = false, referencedColumnName = "APPLICATION") })
@FilterJoinTable(name = "kindId", condition="RATEKINDID = 2")
public Ciratemaster getItemRateMaster() {
   return itemRateMaster;
}

休止状態のWebサイトや他のサイトを検索してみましたが、実際には何も機能しませんでした。私はいつも、すべきでないときに複数の結果をフェッチしたというエラーを思い付きます

前もって感謝します。

4

1 に答える 1

1

フィルタの代わりにこれを試してください:

@org.hibernate.annotations.Where(clause = "RATEKINDID = 2")

編集:JoinColumnsOrFormulaアノテーションを試してください:

@JoinColumnsOrFormulas({
  @JoinColumnOrFormula(formula = @JoinFormula(value = "2", referencedColumnName = "RATEKINDID")),
  @JoinColumnOrFormula(column = @JoinColumn(name = "CIITM_RATE", nullable = false , updatable = false, insertable = false, referencedColumnName = "RATE")),
  @JoinColumnOrFormula(column = @JoinColumn(name = "CIITM_APPLICATION", nullable = false , updatable = false, insertable = false, referencedColumnName = "APPLICATION"))
})
于 2012-11-16T22:41:38.217 に答える