如何使用JPA / Hibernate映射此关系?

时间:2018-11-24 10:04:36

标签: sql hibernate jpa hibernate-mapping

我有两个共享公用密钥的表。我想要的是,当我为第一个表加载类时,我还将获得与第二个表相对应的共享键的类的列表。

更具体地说:tableA的id(id1)存在于tableB的多个条目中。但是,tableB使用复合键,并且同时使用id1和id2作为键。

我想要实现的是,当加载表A的POJO时,我还获得了表B的所有条目,其中表A的id1等于表B中的id1。

public class TableA {
  private String id1;
  private List<TableB> list; // where id1 in tableA == id1 in tableB
}


table A id column: 
id1

table B composite id: 
id1 // same as for tableA
id2

1 个答案:

答案 0 :(得分:1)

类B将具有部分依赖于A的复合标识符。可以使用EmbeddedID或通过指定ID类来映射它。使用ID类如下所示:

实体A

@Entity
public class A {
    @Id
    @Column(name = "id1")
    private Long id1;

    @OneToMany(mappedBy = "a")
    private Set<B> bs;
}

实体B

@Entity
@IdClass(Bid.class)
public class B {
    @Id
    @ManyToOne
    @JoinColumn(name = "id1")
    private A a;

    @Id
    @Column(name = "id1")
    private Long id2;
}

B的ID类别

public class Bid implements Serializable{
    //must be of same type as id of target entity A
    private Long a;
    private Long id2;

    // **must** implement equals and hash code
}