首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Spring Integration DSL:如何删除JPA实体列表?

Spring Integration DSL:如何删除JPA实体列表?
EN

Stack Overflow用户
提问于 2021-08-11 07:11:33
回答 1查看 31关注 0票数 1

我有一堆JPA实体,我像这样检索它们:

代码语言:javascript
运行
AI代码解释
复制
.handle(Jpa.retrievingGateway(myEntityManagerFactory).namedQuery(readQuery))
.transform(/* remove some of the entities from the message, leaving only the ones I want to delete */)

现在我想删除其中的一些。做这件事最好的方法是什么?我在想,一定有一些简单的方法可以用一个非常简单的或者甚至根本不显式的jpaQuery()来完成这个任务?

我的想象是这样的:

代码语言:javascript
运行
AI代码解释
复制
.handle(Jpa.updatingGateway(myEntityManagerFactory)
    .jpaQuery("delete from MyTable m where m in :items")
    .parameter("items", ...(?)... )

或者像这样:

代码语言:javascript
运行
AI代码解释
复制
.handle(Jpa.deletingGateway(myEntityManagerFactory))

使用Spring Integration DSL实现这一点的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-11 07:26:18

你可以这样做:

代码语言:javascript
运行
AI代码解释
复制
.handle(Jpa.updatingGateway(entityManagerFactory).persistMode(PersistMode.DELETE))

尽管它只适用于单个实体。因此,考虑让您的集成流程如下所示:

代码语言:javascript
运行
AI代码解释
复制
.handle(Jpa.retrievingGateway(myEntityManagerFactory).namedQuery(readQuery))
.transform(/* remove some of the entities from the message, leaving only the ones I want to delete */)
.split()
.handle(Jpa.updatingGateway(entityManagerFactory).persistMode(PersistMode.DELETE))

我的意思是在JPA网关之前添加一个拆分器。当然,如果您的.transform()返回列表的话。

我认为,如果消息的有效负载是一个Iterable,那么对于像您这样的用例,我们可能会更方便。已经有一个JpaOperations.deleteInBatch()。因此,JpaExecutor.executeOutboundJpaOperationOnPersistentMode()可以在其分支中进行改进:

代码语言:javascript
运行
AI代码解释
复制
case DELETE:
            this.jpaOperations.delete(payload);
            if (this.flush) {
                this.jpaOperations.flush();
            }
            return payload;

请随时提出GH问题,我们将最终对其进行修改!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68744643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档