首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免多子查询的JPA

避免多子查询的JPA
EN

Stack Overflow用户
提问于 2013-10-03 13:58:59
回答 1查看 463关注 0票数 2

我需要帮助设置我的查询。我不想做多个选择,形成基本相同的子查询,如果我可以避免它。在坚果壳中,我有一个名为TimeSlot的对象,用于跟踪多个细节。这些TimeSlot是被支付的项目。当TimeSlot提交偿还费用的时候,它们被用来创建一个PayableTimeSlot。在TimeSlot可以支付之前,我需要确保它还没有被支付。

当它处于位置时,下面是我的查询:

代码语言:javascript
复制
@NamedQuery(
   name = "TimeSlot.by.person.academy.id.by.contract.date",
   query = "select distinct ts 
       from TimeSlot ts 
       join ts.invitedInstructors ii 
       join ts.academyClass ac 
       join ac.academy a 
       where ii.person.id = ? 
       and a.id = ? 
       and ts.schedule.startDateTime BETWEEN ? AND ?  
       and ts.id not in (select e.id from PayableTimeslot pts join pts.event e)
       and ? not in (select e.claimant from PayableTimeslot pts join pts.event e)")

如您所见,我已经从PayableTimeSot中为第一个not in选择了一个元素。是否有方法将子查询扩展为:(select e.id, e.claimant from PayableTimeslot pts join pts.event e),我只是不确定如何检查多个项,not in子查询。无论如何,如果有一个比我的方式更好的攻击问题,请告诉我。

除非你们都认为多重选择没什么大不了的.平均每周将有30-50个条目进入表格,每个条目被复制超过7-9次(用于审计跟踪)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-03 19:41:05

好吧,经过一些思考,这就是我想出来的。我确实试图用错误的方式回答这个问题.我正在做两个子查询,而我所需要的只是第一个子查询的where,从而将两者结合在一起。

代码语言:javascript
复制
@NamedQuery(
   name = "TimeSlot.by.person.academy.id.by.contract.date",
   query = "select distinct ts "
   + "from TimeSlot ts "
   + "join ts.invitedInstructors ii "
   + "join ts.academyClass ac "
   + "join ac.academy a "
   + "where ii.person.id = ? "
   + "and a.id = ? "
   + "and ts.schedule.startDateTime BETWEEN ? AND ?  "
   + "and ts.id not in (select e.id from PayableTimeslot pts join pts.event e where pts.claimant = ?)")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19161221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档