Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @在一个QueryDSL查询中对两个实体进行筛选,并在一个Where子句中生成查询结果_Java_Hibernate_Querydsl - Fatal编程技术网

Java @在一个QueryDSL查询中对两个实体进行筛选,并在一个Where子句中生成查询结果

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( { @

我有多个实体需要由一行统一筛选。为了简单起见,我希望在每个查询上使用@Filter,而不是更改涉及的每个查询。 现在,当我激活两个@Filter时,只应用了一个(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?=表A.我的版本
,表B没有位置。结果:预期的数据加上表B中错误的版本条目。

实际上自己解决了这个问题:集合od EntityB的JoinColumns被破坏。 对于正确的列,不需要过滤器