Hibernate三元关系和附加表

时间:2017-10-11 10:58:02

标签: java mysql hibernate

我有3个可以相互建立关系的实体。因此,解决此问题的一个好方法是使用另一个表来存储3个实体的3个ID。 让我们说实体是X,Y和Z。

@Entity
public class XYZ {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @ManyToOne
    @JoinColumn(name = "X_ID")
    private X x;

    @ManyToOne
    @JoinColumn(name = "Y_ID")
    private Y y ;

    @ManyToOne
    @JoinColumn(name = "Z_ID")
    private Z z;

    public XYZ(){

    }


}

实体X,Y和Z有自己的属性和自己的主键。 我有几个问题。

1)我应该将@OneToMany添加到私有XYZ xyz属性的X,Y和Z实体上; ?或者,当我们只想在XYZ表的帮助下找到关系时,它是不必要的。

2)在实体XZY中,我有实体X,Y和Z的正常getter和setter。我给整个实体。 Hibernate会自动在XYZ实体中拍摄X,Y和Z的主键吗?

最后一个问题 3)假设我删除了在XYZ实体中使用的对象X,hibernate会自动删除XYZ实体中的记录吗?或者我是否必须添加其他信息。

很抱歉这些问题,但Hibernate对我来说很新。

1 个答案:

答案 0 :(得分:0)

  1. 在另一侧(在X,Y和Z实体上)指定@OneToMany是 没必要,除非你想建立你的关系 双向。
  2. 您已经定义了@JoinColumn注释: X_ID,Y_ID,Z_ID是从中获取的外键列 分别是X,Y和Z实体的主键。
  3. 如果要执行级联删除,以便在删除X时也删除子实体XYZ,那么这是您需要双向建立关系的时间。您需要在X实体上指定@OneToMany映射并添加级联属性。
  4. 示例:

    @OneToMany(mappedBy="x", cascade=CascadeType.REMOVE)
    Set<XYZ> xyzSet;