【问题标题】:How can I bulk delete by a List of model classes with JPA如何通过 JPA 模型类列表批量删除
【发布时间】:2020-06-23 06:17:22
【问题描述】:

通常,当您有一个 List 时,一次从表中删除许多记录非常简单。现在我的查询看起来像这样:

Query q = em.createQuery("DELETE from SomeEntity e WHERE e.id in :someEntityIds")
            .setParameter("someEntityIds", someEntityIds);

someEntityIds 是我要删除的 ID 的 List<int>

但是,我需要根据两个不同的 id 修改要删除的代码。我有一个模型类SomeModel,其中有两个变量

public class SomeModel {

    public String someId;

    public Long anotherId;

}

请注意,此模型与我的 JPA 模型/实体不直接对应。该表将包含这两个值,以及更多。

我有一个列表List<SomeModel>,我需要用它来一次删除多条记录。换句话说,我必须删除SomeModels 列表中与someIdanotherId 匹配的每条记录。如果不遍历列表并对列表中的每个项目运行删除查询,这是否可能?

【问题讨论】:

  • 尝试为删除编写原始 SQL 查询将有助于您(和您)的问题。

标签: java sql jpa


【解决方案1】:

concat 可能会起作用,但您必须事先准备一个复合 ID 列表:

// List<SomeModel> list = ... // assuming there's a list of some models
List<String> compositeIds = list.stream()
                                .map(m -> m.someId + "#" + Integer.toString(m.anotherId))
                                .collect(Collectors.toList());

Query q = em.createQuery("DELETE from SomeModel e WHERE concat(e.someId, '#', e.anotherId) in :compositeIds")
            .setParameter("compositeIds ", compositeIds);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多