我有这些实体:
在我的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未映射。
想法?
感谢
答案 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)")