2015-11-28 60 views
1

我的實體類是這樣的:JPQL:如何使用where子句實現與集合成員聲明相同的功能?

@Entity 
public class Book { 
    ... 
    @ElementCollection 
    private List<String> authors; 
    ... 
} 

現在我想查詢的書籍通過輸入作者名,例如湯姆,但忽略名稱的情況下,所以tom/tOm/...也應該匹配。我知道我可以使用集合成員聲明實現:

select b from Book b, in(b.authors) a where lower(a) = 'tom' 

然而,在我們的應用程序框架是由一個固定的模板生成的所有JPQL語句:

select b from Book b where WHERE_CLAUSE 

我只允許提供where子句。任何人都知道如何使用此模板獲得與上述相同的結果?

+0

變化(或溝)的框架。這是非常有限的。不能使用連接使得它不足以滿足95%的需要執行的查詢。 –

+0

我也想這樣做,但是從框架生成的語句已經太多了,所以改變它非常危險。 –

回答

0

最後,我發現了一個作弊方式:

select b from Book b where (b.id in (select bb from Book bb, in(bb.authors) a where lower(a) = 'tom'))