フィルタとベースのMappedSuperClassを使用して、クエリの実行中に「アクティブ」エンティティのみを表示するようにフィルタリングしようとしていますが、関連するテーブルクラスが同じフィルタを尊重していないという問題が発生しています。
これが私のモデル設定です:
@FilterDef(name="baseStatus")
@Filter(name="baseStatus", condition= "Status = 'A'")
@MappedSuperclass
public abstract class BaseModel {
@Column(name = "Status", insertable = false)
private String status;
// getters and setters...
}
関連するコレクションを持つモデルもあります。
@Entity
@Table(name = "A")
public class A extends BaseModel {
@OneToMany()
private List<B> bs = new ArrayList<B>(0);
// other model properties
}
@Entity
@Table(name = "B")
public class B extends BaseModel {
// model properties
}
クエリを実行する前に、次のコマンドを実行します。
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(A.class)
Filter filter = getCurrentSession().enableFilter("baseStatus");
List<A> as = criteria.list();
この設定を使用すると、クエリを実行しているメインクラスに適切なフィルターが適用されますが、子コレクション( "bs")は結合でフィルター処理されないため、子コレクションを持つアクティブな"A"のみが残ります。 「B」の一部は非アクティブです。
理想的には、BaseModelにのみフィルターを設定したいと思います。各関連付けに個別のフィルターを適用せずに、探していることを実行する方法はありますか?
ありがとう!