Нужна помощь в формулировании запроса JPA, пожалуйста - PullRequest
3 голосов
/ 02 апреля 2011

Учитывая, что эти две сущности в базе данных, доступ к которой осуществляется через Hibernate JPA,

@Entity class A {
   int id;
   String aName;
}

@Entity class B {
   int id;
   String bName;
   @ManyToMany Set<A> aRefs;
}

, я хочу получить коллекцию aName s всех сущностей A, которые не упомянутые B лица.Или, другими словами, все A s, которые не являются частью каких-либо B * aRefs.

Я пробовал несколько альтернатив, используя NOT EXISTS и NOT MEMBER OF с подвыборами идаже баловался с LEFT OUTER JOIN s, но достаточно досадно, что возникающие у меня запросы либо отклоняются интерпретатором Hibernate, либо даже переводятся в неверный SQL, который отклоняется Oracle.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2011

Это из головы, так что я не уверен, сработает ли это или будет для вас правильным решением.

Добавьте другую сторону ваших отношений в сущности A

@Entity class A {
   int id;
   String aName;
   @ManyToOne B bref;
}

тогда вы можете создать ejb-ql-оценку, которая скажет что-то вроде:

0 голосов
/ 03 апреля 2011

3 человека проявили интерес к этому вопросу, поэтому я решил поделиться своим ответом.Я пришел к этому в основном методом проб и ошибок;Извините, но я до сих пор не «ухмыляюсь» на языке запросов JPA.

Работают два запроса:

SELECT a FROM A a WHERE NOT EXISTS 
    (SELECT b FROM B b JOIN b.arefs ba WHERE a = ba)

и

SELECT a FROM A a WHERE a NOT IN 
    (SELECT ba FROM B b JOIN b.arefs ba)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...