2014-02-06 39 views
0

我有這些實體:多對多連接不

在我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連接到Test,但這對於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)")