我有兴趣对以下形式的查询返回的所有实体A进行处理:
SELECT * FROM A a WHERE a.id not in (select b.id from B)
在A是一个“复杂”实体的意义上,它是从其他实体继承(InheritanceTyped.Joined),并且其某些属性是其他实体(@OneToOne和@ManyToOne)。
查询本身需要几分钟来产生结果,因此我希望执行的次数尽可能少。
在这里,我尝试了各种不同的方法来尽可能高效地获取这些A元素:
首先获取ID,然后获取A对象 将所有ID保留在内存中是可行的,因此我执行一次
SELECT a.id FROM A a WHERE a.id not in (select b.id from B)
,然后是select a from A a WHERE a.id= :id
,随着对id列建立索引,它运行得相对较快。这是目前效率最高的解决方案(每秒处理约100个元素)
作为一名新手,我不知道还有什么其他选择可以调查,或者我在尝试中是否做错了什么。
提出我的问题: