【问题标题】:mysql jpa deleting multiple records from different tablesmysql jpa 从不同的表中删除多条记录
【发布时间】:2023-02-25 12:46:53
【问题描述】:

有两个表:

        User table
        +----+----------------------------+-------------+
        | id | date_created_user          | email       |
        +----+----------------------------+-------------+
        |  7 | 2023-02-23 13:23:09.085897 | www@www.www |
        | 16 | 2023-02-25 14:23:31.691560 | qqq@qqq.qqq |
        | 17 | 2023-02-25 14:24:02.089010 | aaa@aaa.aaa |
        | 18 | 2023-02-25 14:24:24.708500 | xxx@xxx.xxx |
        | 19 | 2023-02-25 14:25:19.253770 | ooo@ooo.ooo |
        +----+----------------------------+-------------+


        Deletion table
        +----+----------------+----------------------------+---------+
        | id | active         | date                       | user_id |
        +----+----------------+----------------------------+---------+
        | 10 | false          | 2023-02-25 14:23:31.691560 |      16 |
        | 11 | false          | 2023-02-25 14:24:02.089010 |      17 |
        | 12 | true           | 2023-02-25 14:24:24.708500 |      18 |
        | 13 | true           | 2023-02-25 14:25:19.253770 |      19 |
        +----+----------------+----------------------------+---------+

有必要从这些表中删除某些记录。

条件如下:

如果在Deletiontableactive字段包含值false并且已经超过 24 小时date字段,则需要删除这条记录,并从Usertable

user_id键入Deletiontable

我的仓库

    @Transactional(readOnly = true)
    @Repository
    public interface DeletionRepository extends JpaRepository<Deletion, Long> {



        @Transactional
        @Modifying
        @Query("DELETE FROM Deletion as a WHERE a.active = false AND a.date <= :date")
        void deleteDeletionByActiveAndDate(@Param("date") String date);


    }

【问题讨论】:

    标签: mysql jpa


    【解决方案1】:

    鉴于您需要在删除查询中执行一些日期时间操作,这往往是高度特定于数据库的,我建议使用以下本机 MySQL 查询:

    DELETE
    FROM User u
    WHERE EXISTS (
        SELECT 1
        FROM Deletion d
        WHERE d.user_id = u.id AND
              d.active = false AND
              d.date < NOW() - INTERVAL 1 DAY
    );
    

    【讨论】:

      猜你喜欢
      • 2013-01-30
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多