我使用复合键定义了两个实体之间的多对多关系。 问题在于,当我获得连接对象时,它仅使用关系的一侧而不是两侧进行过滤。
图片使问题更加清晰。 在这里我正在寻找的是dtid = 185和prid = 352,但我从多对多关系得到的是两个突出显示的行。
Entiry 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;
答案 0 :(得分:0)
尝试使用Embedded Ids定义Composite Key,然后尝试过滤掉所需的值。以下是StackOverflow的先前查询,其中详细介绍了如何使用嵌入式ID - How to create and handle composite primary key in JPA