ManyToMany加入Not IN

时间:2014-02-06 15:54:19

标签: many-to-many jpa-2.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>();

我需要编写一个查询来返回与给定测试无关的所有TestType。

我有这个问题:

@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未映射。

想法?

感谢

1 个答案:

答案 0 :(得分:0)

JPA查询是在实体上完成的,而不是在表上完成的。连接表Test_TestType不是实体,因此无法在JPA查询中明确访问它。

您可以尝试像这样的查询(不是100%确定它是否有效)。在subselect中应该有一个额外的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)")