JPA不支持它,但是如果您将hibernate用作JPA提供程序,则可以使用批注@FilterDef
和@Filter
。
Hibernate3能够预定义过滤条件,并在类级别和集合级别附加这些过滤器。过滤条件允许您定义一个限制子句,该子句类似于类和各种集合元素上可用的现有“ where”属性。但是,可以对这些过滤条件进行参数化。然后,应用程序可以在运行时决定是否应启用某些过滤器以及其参数值应为什么。过滤器可以像数据库视图一样使用,但是它们在应用程序内部被参数化。
@Entity
public class A implements Serializable{
@Id
@Column(name = "REF")
private int ref;
@OneToMany
@JoinColumn(name = "A_REF", referencedColumnName = "REF")
@Filter(name="test")
private Set<B> bs;
}
@Entity
@FilterDef(name="test", defaultCondition="other = 123")
public class B implements Serializable{
@Id
@Column(name = "A_REF")
private int aRef;
@Id
@Column(name = "OTHER")
private int other;
}
Session session = entityManager.unwrap(Session.class);
session.enableFilter("test");
A a = entityManager.find(A.class, new Integer(0))
a.getb().size() //Only contains b that are equals to 123