【发布时间】:2015-12-13 23:12:54
【问题描述】:
我使用复合键定义了两个实体之间的多对多关系。 问题是当我得到连接对象时,它只被关系的一侧而不是两侧过滤。
图片让问题更清晰。 我在这里寻找的是 dtid=185 和 prid=352 但我从多对多关系中得到的是两个突出显示的行。
条目 D:
@OneToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "d", orphanRemoval = true)
private List<DP> dp = new ArrayList<DP>();
实体 P:
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "p")
private List<DP> dp = new ArrayList<DP>();
PK类:
public class DPPK implements Serializable{
private Integer d;
private Integer p;
}
加入:
@IdClass(DPPK.class)
@Entity
@Table(name = "definition_property")
@NamedQueries({
@NamedQuery(name = "DP.findAll", query = "SELECT d FROM DP d")})
public class DefinitionProperty extends AbstractEntity{
@Id
@JoinColumn(name = "dtid", referencedColumnName = "id")
@ManyToOne(optional = false)
private D d;
@Id
@JoinColumn(name = "prid", referencedColumnName = "id")
@ManyToOne(optional = false)
private P p;
@Column(name = "initial_value")
@Basic(optional = false)
private String initialValue;
【问题讨论】:
-
您没有显示用于尝试获取 dtid=185 和 prid=352 的 DP 的查询。这应该只是 em.find(new DPPK(185, 532)) 的问题。您展示的不是多对多关系,而是两个独立的 1:M 关系。如果您从一端遍历列表,则需要在 1:M 列表中自行搜索您要查找的 DP 实例。
标签: java jpa many-to-many eclipselink