假设我有以下两个实体:
@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/