Hibernate三元关系和附加表



我有三个实体,它们之间可以有关系。因此,解决这个问题的一个好步骤是使用另一个表来存储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. 在另一侧(在X、Y和Z实体上)指定@OneToMany没有必要,除非你想建立关系双向
  2. 您已经定义了@JoinColumn注释:X_ID、Y_ID、Z_ID,它们是从X、Y和Z实体的主键
  3. 如果要执行级联删除,则在删除X时,子实体XYZ也会被删除,此时需要使关系双向。您需要在X实体上指定@OneToMany映射,并添加级联属性

示例:

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

最新更新