我需要帮助设置我的查询。我不想做多个选择,形成基本相同的子查询,如果我可以避免它。在坚果壳中,我有一个名为TimeSlot的对象,用于跟踪多个细节。这些TimeSlot是被支付的项目。当TimeSlot提交偿还费用的时候,它们被用来创建一个PayableTimeSlot。在TimeSlot可以支付之前,我需要确保它还没有被支付。
当它处于位置时,下面是我的查询:
@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次(用于审计跟踪)。
发布于 2013-10-03 19:41:05
好吧,经过一些思考,这就是我想出来的。我确实试图用错误的方式回答这个问题.我正在做两个子查询,而我所需要的只是第一个子查询的where,从而将两者结合在一起。
@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 = ?)")https://stackoverflow.com/questions/19161221
复制相似问题