2013-06-19 2 views
0

Два JPQL запроса определен ниже, Какой из них имеет более эффективную работу (в временных ограничениях), или они имеют равный свои характеристики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; 
    } 
+0

Какая связь существует между ChildEntity и ParentEntity, вы можете поместить классы сущностей с их атрибутами? – meyquel

+0

Существует много отношений между ChildEntity и ParentEntity. – user225928

ответ

2

Попробуйте их как видеть, это единственный реальный способ узнать.

Ни один из них не очень эффективен, поскольку оба они используют подвыборы, которые обычно менее эффективны, чем соединения. ЧЛЕНЫ будут использовать подвыбор. Лучшее решение - выяснить, как писать один и тот же запрос с помощью соединений, без подвыборов. Но это также зависит от того, насколько хорош оптимизатор вашей базы данных, он может оптимизировать подвыбор.

0

не нужно использовать родительский объект в запросе, вы можете использовать ссылку дочернего объекта:

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

первый раз пользователь объект ОРМ нагрузки в память данных, поэтому firt время вы воспринимаете медленно. ..

Смежные вопросы