我有一個多對多訪問表的字段和我想要這樣的查詢:休眠 - 從多對多關係
「從實體E選擇e.manytomany.fieldName」
我可以」 t選擇ManyToMany表的字段,唯一的可能性是選擇表(如「從實體e中選擇e.manytomany」),它給了我一個集合<>。
有沒有辦法讓我做這樣的查詢?
我有一個多對多訪問表的字段和我想要這樣的查詢:休眠 - 從多對多關係
「從實體E選擇e.manytomany.fieldName」
我可以」 t選擇ManyToMany表的字段,唯一的可能性是選擇表(如「從實體e中選擇e.manytomany」),它給了我一個集合<>。
有沒有辦法讓我做這樣的查詢?
從我所看到的,你想完成一個連接條件。
級別A & B:
public class A {
@Id
private String id;
@ManyToMany
@JoinTable(name="a_b", joinColumns={@JoinColumn(name="a_id")}, inverseJoinColumns={@JoinColumn(name="b_id")})
private Set<B> b;
private String field;
}
public class B {
@Id
private String id;
@ManyToMany(mappedBy = "b")
private Set<A> a;
}
查詢:
TypedQuery<String> query = em.createQuery("SELECT a.field FROM A a JOIN B b ON a MEMBER OF b.a AND b = :b", String.class);
query.setParameter("b", someBInstance);
導致成"someBInstance.a.field"
謝謝......我上週找到了解決方案,但您的答案依然存在...... – Cypher
很高興您找到了解決方案。 thx爲我的第一個被接受的答案=) –
的
List<String>
你期望的返回類型?如果你有'@ ManyToMany',你必須收到'Collection'。 –它正在返回設置,因爲它是一個集合,我不能像使用我的示例一樣使用它的任何字段......我也無法定義getter方法來將設置解析爲字符串並使用查詢比如「從實體e中選擇e.parsedManyToMany」......這個解決方案對我來說也是可以接受的。 –
Cypher