在 HQL 中删除所有具有对象的奴隶

Delete all slaves with an object in HQL

我使用以下 HQL 查询来删除数据库中的特定对象。

delete from com.ranking.Footballclub where id = 1

我这样做时遇到的问题,它破坏了一个外键。

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The DELETE statement conflicted with the REFERENCE constraint "FK_VKLC3OLNFZIT2FCYMMKDO2ERZ4". The conflict occurred in database "sports", table "dbo.FOOTBALL_PLAYER", column 'CLUB_ID'

一个运动队有一群球员。我可以先删除所有球员,然后再删除 Footballclub。但是足球俱乐部不仅仅拥有球员。例如,它有一份员工名单、调动名单……他们的外键也会被破坏。

对于这种情况,我在 HQL 中寻找一些东西来删除 1 条语句中的所有从属字段。

您只能在您的实体上使用@OneToMany(cascade=CascadeType.REMOVE) 注释并通过实体管理器将其删除。没有办法用 hql 来做。或者在你的 DDL 中使用约束(外键删除级联);

您可以在数据库中显式设置ON DELETE CASCADE,或者用注解@org.hibernate.annotations.OnDelete标记需要的子实体。

它会在架构生成期间自动将 on delete 添加到架构中。喜欢 -

@OneToMany(fetch = FetchType.EAGER, mappedBy = "YOUR_PARENT", 
            cascade = CascadeType.REMOVE)    
 @org.hibernate.annotations.OnDelete(
            action = @org.hibernate.annotations.OnDeleteAction.CASCADE)
 private List<YOUR_CHILD> CHILDS;