gpt4 book ai didi

java - Hibernate单向一对一

转载 作者:行者123 更新时间:2023-12-01 12:40:31 24 4
gpt4 key购买 nike

我有两个类

class Point {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "point_id")
private Long id;

@Column(name = "name")
private String name;
}
class Link {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "link_id")
private Long id;

@Column(name = "name")
private String name;

@OneToOne
@JoinColumn(name = "fp_id")
private Point firstPoint;

@OneToOne
@JoinColumn(name = "sp_id")
private Point secondPoint;
}

如果我删除链接,我会收到约束错误。我想要获得以下功能:

  1. 删除点 -> 自动删除链接
  2. 删除链接 -> 点未自动删除

如何配置这个关系?

更新DB图

Diagram of DB

最佳答案

对我来说,这看起来不像是一对一的关联,因为一个点可能有多个传入链接。它看起来很像点侧的虚拟一对多和链接侧的两个多对一关联。

现在,实际上映射一对多是非常棘手的,因为它需要映射到子端的两列。您可以通过在点上设置两个集合来解决此问题,每个集合对应链接中的每一列,例如传入和传出链接,从而有效地将无向图转换为有向图,但这会改变逻辑。

具有两个多对一属性的简单映射最容易实现。然后,应用程序应在删除点之前使用 hql 批量删除操作来删除链接:从链接中删除,其中firstPoint = :point 或 secondaryPoint = :point。

如果您确实需要 hibernate 为您执行删除操作,我建议使用cascade=delete 创建两个集合。

关于java - Hibernate单向一对一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25148293/

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