返回payType ='check'和lettertype ='mail'的所有帐户的查询是什么?
另一种想法是对Payment和Letter做两个查询并添加它们但是由于我正在使用的api(SpringBatch)的性质,我只是暴露在AbstractJpaQueryProvider中的'Query'所以我宁愿返回一个Account集合而不是一个Object,然后我必须将其转换为使用该界面的每个服务中的属性。
答案 0 :(得分:1)
select a from Account a join a.payments p join a.letters l where p.paymentType='check' and l.letterType='mail'
答案 1 :(得分:1)
如果您尝试根据应用于其子记录的某些条件过滤父记录,则最好使用“exists”表达式,例如
select a from Account
where exists(select p from Payment where p.account = a and p.paymentType='check')
and exists(select l from Letters l where l.account = a and l.letterType='mail')
这将避免单个查询中多个@OneToMany联接导航引入的笛卡尔联接问题。