java - 如何在 JPA 中查询多对多关系中的实体列表?

标签 java hibernate jpa

假设我有以下两个实体:

@Entity
@Table(name="manifest")
public class Manifest extends DbTable implements Serializable {
    public Manifest() { }

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    public Long id;

    @ManyToMany(cascade=CascadeType.ALL, mappedBy="manifests",fetch= FetchType.LAZY)
    public List<Thingy> thingys;
}

@Entity
@Table(name="thingy")
public class Thingy extends DbTable implements Serializable {
    public Thingy(){}

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    public Long id;

    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name = "manifest_thingy",
            joinColumns = @JoinColumn(name = "thingy_id", referencedColumnName="id"),
            inverseJoinColumns = @JoinColumn(name = "manifest_id", referencedColumnName="id"))
    public List<Manifest> manifests;
}

如何查询属于给定 list 的我的元素?我尝试过类似的查询

"SELECT DISTINCT d 
 FROM Thingy d
 WHERE :manifest MEMBER OF d.manifests"

"SELECT DISTINCT d
 FROM Thingy d
 JOIN d.manifests m
 WHERE m = :manifest"

"SELECT DISTINCT d
 FROM Thingy d
 JOIN d.manifests m
 WHERE m.id = :manifestId"

这三个中的后者基本上是我可以找到的唯一建议,但没有结果。对于所有这三个,我认为我得到的是一个空列表(而不是一个错误)。查询是通过这样的方式输入的(适当设置参数):

myEntityManager
    .createQuery(giantQueryStringGoesHere, Thingy.class)
    .setParameter("manifest", myManifestObject)
    .getResultList();

最佳答案

如果您知道特定的 list ID,难道您不能检索该 list 并从中获取事物列表吗?

Manifest m = em.find(Manifest.class, manifestId);
List<Thingy> thingys = m.thingys;

关于java - 如何在 JPA 中查询多对多关系中的实体列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47319735/

相关文章:

java - 创建历史事件

java - 从tomcat到 jetty 的错误处理程序

java - 创建名为“entityManagerFactory”的 bean 时出错,无法正常运行应用程序

hibernate - JPA/Hibernate 删除实体有时不起作用

java - 如何使用在应用程序的 main 方法中初始化的 Spring 提取 Hibernate DB 记录

java - 为什么我的异常类需要序列化?

java - JPA/Hibernate在获取数据时非常慢

java - 有没有办法在 JPA 查询中从数据库中选择特定列

java - 在 EclipseLink 中分离实体

java - Hibernate 谓词 - 无效路径