2014-02-06 2 views
0

У меня есть эти объекты:ManyToMany присоединиться Не В

В моем TestType сущности:

@ManyToMany(mappedBy = "testTypes") 
private Set<Test> tests = new HashSet<Test>(); 

В моей тестовой сущности

@ManyToMany(fetch = FetchType.EAGER) 
@JoinTable(name="Test_TestType", joinColumns = { @JoinColumn(name = "test_id", referencedColumnName = "test_id") }, inverseJoinColumns = { @JoinColumn(name = "testtype_id", referencedColumnName = "testtype_id") }) 
@OrderBy("shortName ASC") 
private Set<TestType> testTypes = new HashSet<TestType>(); 

Мне нужно написать запрос, чтобы вернуть все TestTypes не связанных с данным тестом.

У меня есть этот запрос:

@Query("select new org.company.IdValue(d.id, d.name) from TestType d where d.id NOT IN (select t.id from Test_TestType t JOIN t.tests test where test.id != :id)") 

Но, получаю ошибку: Test_TestType не отображается.

Идеи?

благодаря

ответ

0

JPA запросы выполняются на юридических лиц, а не на таблицах. Таблица соединений Test_TestType не является сущностью, поэтому ее нельзя получить в явном доступе в запросе JPA.

Вы можете попробовать запрос, подобный этому (не на 100% уверен, что он работает). В подзапросе должно быть добавлено дополнительное соединение TestType, а не просто подключение Test_TestType к тесту, но это нормальное поведение для запросов JPA).

@Query("select new org.company.IdValue(d.id, d.name) from TestType d " 
+ "where d.id NOT IN (" 
+ "select distinct t.id from TestType t JOIN t.tests test where test.id != :id)") 
Смежные вопросы