在 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;
我使用以下 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;