一个QueryDSL查询中的两个实体上的@Filter导致其中一个

时间:2017-03-17 12:40:58

标签: java hibernate querydsl

我有多个实体需要由一行统一过滤。为了简单起见,我想在每个上使用@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.

1 个答案:

答案 0 :(得分:0)

实际上我自己解决了:EntityB的JoinColumns集合被打破了。 使用正确的joinColumns,不需要过滤器。