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

Java 如何查询JPA中多对多关系中的实体列表?,java,hibernate,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=CascadeT

假设我有以下两个实体:

@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;
}

这三条建议中的后一条基本上是我在四处寻找的唯一建议,但没有任何效果。对于所有这三个,我认为我得到的是一个空列表(而不是一个错误)。查询是通过以下方式进行的(根据需要设置参数):


如果你知道特定的清单ID,你就不能检索该清单并从中获取内容列表吗

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

哦,是的,这也很有效。我想在一个类型化查询中设置它,这样我就不会将其他内容加载到内存中,也可以在数据库中对我要执行的查询进行额外过滤(OP中没有显示)。好吧,呃,哎哟,实际上第三个查询很好(可能还有第二个),我只是数据库设置不正确。
"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();
Manifest m = em.find(Manifest.class, manifestId);
List<Thingy> thingys = m.thingys;