【问题标题】:How to delete entity and all associated entities in one @Query如何在一个@Query 中删除实体和所有关联实体
【发布时间】:2021-11-05 08:42:39
【问题描述】:

我的餐厅实体有投票列表和菜肴。 他们都是@OneToMany

public class Restaurant extends AbstractNamedEntity {
    @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<Dish> dishes;
    @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<Vote> votes;

}

级联删除执行多个SQL,我想自己写@Query。它应该首先删除菜肴和投票。他们有 restaurant_id,然后 - 投票。这样我就没有 ConstraintViolation 异常。

您能否给我看一个这个 JPQL 查询的示例。

【问题讨论】:

    标签: java spring jpql


    【解决方案1】:

    您可以在@Query 注释之上使用@Modifying 注释。 @Modifying 注解使 JPQL 不仅可以执行 SELECT 查询,还可以执行 UPDATE、DELETE 和 INSERT。

    例如在您的 RestaurantJPARepository 类中,创建如下所示的方法

    @Modifying
    @Query("DELETE FROM Restaurant r WHERE r.id =:id")
    void deleteRestaurant(@Param("id") String id); 
    

    【讨论】:

    • 问题是如何在没有许多 SQL 查询的情况下做到这一点。它现在已经修改和工作,但有大量的 SQL
    • 在我看来,DELETE FROM Restaurant r WHERE r.id =:id 只是一个 SQL 命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2011-01-29
    • 2020-09-14
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多