jpa中与复合键的多对多关系

时间:2015-09-17 07:01:24

标签: java jpa many-to-many eclipselink

我使用复合键定义了两个实体之间的多对多关系。 问题在于,当我获得连接对象时,它仅使用关系的一侧而不是两侧进行过滤。

图片使问题更加清晰。 在这里我正在寻找的是dtid = 185和prid = 352,但我从多对多关系得到的是两个突出显示的行。

enter image description here

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;

1 个答案:

答案 0 :(得分:0)

尝试使用Embedded Ids定义Composite Key,然后尝试过滤掉所需的值。以下是StackOverflow的先前查询,其中详细介绍了如何使用嵌入式ID - How to create and handle composite primary key in JPA