Java @在一个QueryDSL查询中对两个实体进行筛选,并在一个Where子句中生成查询结果
我有多个实体需要由一行统一筛选。为了简单起见,我希望在每个查询上使用@Filter,而不是更改涉及的每个查询。 现在,当我激活两个@Filter时,只应用了一个(from实体中的一个),连接实体的@Filter将被忽略,没有错误消息。 最简单的例子: 实体A:Java @在一个QueryDSL查询中对两个实体进行筛选,并在一个Where子句中生成查询结果,java,hibernate,querydsl,Java,Hibernate,Querydsl,我有多个实体需要由一行统一筛选。为了简单起见,我希望在每个查询上使用@Filter,而不是更改涉及的每个查询。 现在,当我激活两个@Filter时,只应用了一个(from实体中的一个),连接实体的@Filter将被忽略,没有错误消息。 最简单的例子: 实体A: @Entity @FilterDef(name="ExampleFilterA", parameters=@ParamDef( name = "version", type = "integer" ) ) @Filters( { @
@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?=表A.我的版本
,表B没有位置。结果:预期的数据加上表B中错误的版本条目。实际上自己解决了这个问题:集合od EntityB的JoinColumns被破坏。
对于正确的列,不需要过滤器