2012-11-23 37 views
4

當爲實體簿創建謂詞時,我希望能夠 左鍵加入類別(ManyToMany)以在類別中添加AND謂詞。 我可以簡單地實現,如果我有JPAQuery實例:如何在構建謂詞時加入謂詞,但沒有JPAQuery實例

if (catId != null) { 
    jpaQuery.leftJoin(book.categories, category); 
    jpaQuery.where(category.id.eq(catId).or(category.parentCategory.id.eq(catId))); 
} 

但是建立謂語時,我沒有卻把JPAQuery。 所以謂詞本身我可以這樣做:

booleanBuilder.and(category.id.eq(this.categoryId).or(category.parentCategory.id.eq(this.categoryId))); 

但對於leftjoin如何進行無jpaQuery實例?

+0

關於這個的任何消息?我正在遍地尋找一個優雅的連接獲取解決方案,沒有太多的麻煩......顯然,Spring Data並沒有想到用例更加複雜,然後像他們的基本示例中顯示的那樣從一個單一的「從哪裏選擇」。 .. –

+0

是的,我發現了一個解決方案:我編寫了一個擴展到彈簧數據接口:public interface TworkQueryDslRepository 擴展JpaRepository {)並添加了一個準備方法:JPAQuery createQuery();以及所有使用新參數類型JPAQuery的執行方法:除了 findAll(JPAQuery jpaQuery,Predicate謂詞,Pageable可分頁);目標是讓Repo構建併爲我提供JPAQuery,以便我可以獲取。第二階段,我可以調用一個幾乎標準的repo API,但在我的情況下,將JPAQuery作爲第一個參數返回。我應該做一個PullResquest有時 –

回答

1

您需要查詢來聲明Querydsl中的左連接。如果這與Spring Data相關,他們可能會想出一個API級解決方案。

book.categories.any()可以用來代替類別,但它的序列化與JPQL不同,子查詢不是連接。

+0

我試圖用Spring Data來做到這一點,感謝指針,這是他們的API的問題。 – JBCP