0

下面定义的两个 JPQL 查询,哪一个具有更有效的性能(在时间限制上)或者它们具有相同的性能 -

ParentEntity <=> ChildEntity [存在多对多关系]

SELECT me from ChildEntity me where me <> All(select me.childEntitiesRef from ParentEntity pe where pe.parentId=:parentId)

或者

SELECT me FROM ChildEntity me, ParentEntity pe WHERE me NOT MEMBER OF pe.childEntitiesRef AND pe.parentId=:parentId

 class ParentEntity{
       @Id
       String parentId; 
       @ManyToMany
       List<ChildEntity> childEntitiesRef;
    }

 class ChildEntity {  
      @Id
      String childId;  
    }
4

2 回答 2

3

试试看,这是唯一真正了解的方法。

两者都不是很有效,因为它们都使用子选择,这通常比连接效率低。MEMBER OF 将使用子选择。最好的解决方案是弄清楚如何使用连接而不是子选择来编写相同的查询。但这也取决于您的数据库优化器有多好,它可能会优化子选择。

于 2013-06-20T14:10:33.030 回答
0

查询中不需要使用父实体,可以使用子实体引用:

where me.parentId.parentId (<>=...) param 

当你第一次使用实体 ORM 加载内存数据时,这就是为什么你第一次觉得很慢......

于 2013-06-19T18:18:46.307 回答