我有一个多对多访问表的字段和我想要这样的查询:休眠 - 从多对多关系
“从实体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