Hibernate - 从多对多关系访问字段

Posted

技术标签:

【中文标题】Hibernate - 从多对多关系访问字段【英文标题】:Hibernate - Accessing fields from a ManyToMany relation 【发布时间】:2016-05-12 13:10:11 【问题描述】:

我有一个 ManyToMany 表,我想进行如下查询:

“从实体 e 中选择 e.manytomany.fieldName”

我无法选择 ManyToMany 表的字段,唯一的可能是选择表(例如“从实体 e 中选择 e.manytomany”),它给了我一个 Set。

有什么方法可以让我做这样的查询吗?

【问题讨论】:

您期望什么返回类型?如果您有@ManyToMany,您必须收到Collection 它返回 Set 并且因为它是一个集合,我不能像我的例子一样使用它的任何字段......我也无法定义一个 getter 方法来解析将 设置为字符串并使用“从实体 e 中选择 e.parsedManyToMany”之类的查询......这个解决方案对我来说也是可以接受的。 【参考方案1】:

据我所知,您想要完成一个连接条件。

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);

这导致List&lt;String&gt;of "someBInstance.a.field"

【讨论】:

谢谢...我上周找到了解决方案,但您回答的决心仍然很重要... 很高兴您找到了解决方案。谢谢我的第一个接受的答案=)

以上是关于Hibernate - 从多对多关系访问字段的主要内容,如果未能解决你的问题,请参考以下文章

从多对多关系中获取结果

使用实体框架从多对多关系中选择数据

Hibernate多对多关系映射(建表)

从多对多关系中获取数据

核心数据 - 从多对多关系构建 NSPredicate

如何从多对多关系中只加载 1 个结果 Laravel