我有多个实体需要由一行统一过滤。为了简单起见,我想在每个上使用@Filter,而不是更改所涉及的每个查询。 现在,当我激活两个@Filters时,只应用一个(from实体中的一个),忽略连接实体的@Filter而不显示错误消息。 最小的例子: 实体A:
@Entity
@FilterDef(name="ExampleFilterA", parameters=@ParamDef( name = "version", type = "integer" ) )
@Filters( {
@Filter(name="ExampleFilterA", condition=":version = MY_VERSION") } )
@Table(name = "TABLE_A")
public class EntityA implements Serializable {
private Integer myVersion;
@Column(name = "MY_VERSION")
public Integer getMyVersion() {
return myVersion;
}
public void setMyVersion(Integer myVersion) {
this.myVersion = myVersion;
}
...other columns...
}
EntityB类似
加载方法:
EntityManager em = getEntityManager();
Session session = em.unwrap(org.hibernate.Session.class);
Filter filterA = session.enableFilter("ExampleFilterA");
filterA.setParameter( "version", 1 );
Filter filterB = session.enableFilter("ExampleFilterB");
filterB.setParameter( "version", 1 );
JPAQuery exampleQuery = query()
.from(A)
.join(A.entityB, B);
现在,这会生成一个查询(取自服务器日志),该查询只有WHERE ? = TABLE_A.MY_VERSION
,没有TABLE_B的位置。结果:预期的数据加上错误的版本来自表B.
答案 0 :(得分:0)
实际上我自己解决了:EntityB的JoinColumns集合被打破了。 使用正确的joinColumns,不需要过滤器。