2010-11-28 8 views
2

エンティティAとエンティティBの2つのエンティティがあるとします。 両方のエンティティに対して2つのテーブルが定義されています。 EntityBはEntityAの子エンティティです。 hibernate注釈を使用するjava pojosでは、以下のように、テーブルEntityAとEntityBに対応する2つのクラスを定義しました。Hibernate:親エンティティのフィルタは暗黙的に子エンティティをフィルタリングしますか?

@FilterDef(name = "myfilter", parameters = { @ParamDef(name = "year", type = "int") }, defaultCondition = ":year = year") 

    public class EntityA 

    { 

     @OneToMany(mappedBy="EntityA") 
     List<EntityB> getEntityBList() 
     { 
     } 

    } 


    public class EntityB 
    { 

     @ManyToOne 
     @joincolumn(name="entityA_id") 
     EntityA getEntityA() 
     { 
     } 

    } 

私はEntityAでフィルタを取得しています。 EntityBのオブジェクトが、親子関係を念頭に置いて保持している、またはEntityBに明示的にフィルタを置く必要がある、EntityAのフィルタリングされたオブジェクトに対応するものだけを持っていることは暗黙のことですか?

例2010年に対応するオブジェクトがロードされるように、EntityAがフィルタリングされている場合。私はEntityBの読み込まれたオブジェクトが、2010年のみに対応するEntityAオブジェクトの子である必要があります。

答えて

1

EntityBは決して直接クエリされませんが、常にentityA.getEntityBList()によってロードされる場合、フィルタは機能します。しかし、EntityBを直接照会すると、結果はフィルタリングされません。フィルタは、EntityAをロードするためにHibernateによって起動されるすべてのSQLのうちのWHEREに含まれる制限節と考えることができます。

+0

私はentityBにないentityAテーブルにのみyearカラムを持っています。場合は、たとえ私もそれを直接クエリをEntityBフィルタリングしたいと仮定します。私は何をすべきか?サンプルコードを教えてください。 –

+0

何時でも私の質問には答えられていません。疑問に思っている点を明確にしていないのですか?私の質問を改善するにはどうすればよいですか? –

+0

保留中のすべての質問にお返事いただきありがとうございます。 –

0

私は同じ問題を抱えていました。あなたは私が私の休止状態の定義のためにXMLを使用しました見ることができるようにそれは

<filter 
    name="myFilter" 
    condition="((select a.myProperty from EntityA a where a.id = entityA_id) = :myPropertyParam)" 
/> 

例えば

、あなたが明示的にエンティティAへの参照を作成するEntityB用のフィルタを定義する必要があることが判明しました。アノテーションでも可能であると確信しています。

関連する問題