gpt4 book ai didi

java - Hibernate三元关系和附加表

转载 作者:行者123 更新时间:2023-11-29 18:19:49 25 4
gpt4 key购买 nike

我有 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 添加到属性 private 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;

关于java - Hibernate三元关系和附加表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46686499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com