gpt4 book ai didi

java - 如何删除实体和子实体

转载 作者:行者123 更新时间:2023-11-30 06:09:57 25 4
gpt4 key购买 nike

我有一个问题需要解决。我有两个实体:ActionLogging:

@Entity
public class Action {

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

...other fields
...other fields


@Column
private Date start;

@Column
private Date end;


@Entity
public class Logging {

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

@ManyToOne
@JoinColumn(name = "action_id")
private Action action;

..not important fields

@Column
private String domain;

@Column
private Date date;

只有日志记录表有一列 action_id 作为 FOREIGN KEY

一个操作可以有多个日志记录。

问题是:如何删除日期早于特定日期且具有特定域(位于日志记录表中)的所有操作实体?例如

deleteActionByDateAndDomain(LocalDateTime date, String domain)

日志实体是所有者,对吗?那么,我是否应该删除操作实体,然后通过例如级联删除所有相关的日志记录实体?或者相反 - 首先删除满足我的条件的所有日志实体(dateX 之前的日期和域 == myDomain 作为参数传递)?

你会如何实现它?例如,我可以删除操作实体和所有相关的日志记录实体,但操作实体中没有字段域(仅在日志记录中)。

如果可能的话,我应该使用 CrudRepository 接口(interface)。

提前非常感谢您!

最佳答案

你可以通过设置属性cascade = CascadeType.REMOVE来指定级联类型来级联删除操作,但是如果使用不当,这可能会让你有些头疼:

  • 如果误删除某条记录,可能会级联删除大量数据
  • 由于 Hibernate 执行许多查询,应用程序可能会变慢 ( link )

因此,如果您不希望出现这些问题,可以手动管理删除。当您删除某些记录时,您就会知道还需要删除哪些记录。优点是您拥有更多控制权,并且可以根据需要通过创建批量删除来优化流程。

关于java - 如何删除实体和子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50474112/

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