私は 3 つのクラスを持っておりBase
、次のようChild
にOther
定義されています。
@Entity
@Filter(name = "myFilter", condition = "propBase = 'special'")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Base {
private String propBase;
//Getters, Setters
}
@Entity
public class Child extends Base {
private String propChild;
//Getters, Setters
}
@Entity
public class Other {
@Filter(name = "myFilter", condition = "propBase = 'special'")
private Set<Child> myList;
//Getters, Setters
}
フィルターがパッケージ レベルで定義されていると仮定すると、それを使用するすべてのクラスから表示されます。
myFilterを有効にしたセッションを使用して、データベースから のインスタンスを取得Other
します。次に、コレクションにアクセスしようとするとmyList
、コレクションが遅延として宣言されているため、Hibernate はデータベースからコレクションをフェッチしようとします。しかし、生成された SQL クエリには予想外のことがありました。テーブルのエイリアスが列Child
の前に使用されていpropBase
ます。この列はテーブルで定義されていないためChild
(で定義されていますBase
)、次のエラーが発生します。 :
エラー JDBCExceptionReporter - 「where 句」の列「childAlias.propBase」が不明です
このスレッドによると、それは予想される動作のようですが、どのようになるのかわかりません。また、これが予想される動作であると仮定すると、条件が基本クラスで定義されたプロパティを使用するときにフィルタリングを使用する方法は?
ありがとう