2017-03-17 31 views
0

我有多個實體需要被一個行統一過濾。爲了保持簡單,我想在每個上使用@Filter,而不是改變涉及的每個查詢。 現在,當我激活兩個@Filters時,只應用了一個(來自實體中的一個),所加入實體的@Filter被忽略而沒有錯誤消息。 最小例如: 實體A:@Filter兩個實體在一個QueryDSL中的查詢結果在一個where子句中

@Entity 
@FilterDef(name="ExampleFilterA", [email protected](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,沒有where的TABLE_B。結果:期望的數據加上來自表B的錯誤版本entrys。

回答

0

實際上自己解決了它:集合od EntityB的JoinColumns被打破。 使用正確的joinColumns,不需要過濾器。

相關問題