gpt4 book ai didi

java - Spring Data Repository @Query - 更新并返回修改后的实体

转载 作者:搜寻专家 更新时间:2023-10-31 20:31:57 25 4
gpt4 key购买 nike

假设我们有一个带有自定义方法的 Spring Data 存储库接口(interface)...

@Modifying
@Transactional
@Query("UPDATE MyEntity SET deletedAt = CURRENT_TIMESTAMP WHERE id = ?1")
void markAsSoftDeleted(long id);

这个方法只是简单的设置了实体的deletedAt字段,ok。有什么方法可以让此方法返回 MyEntity 的更新版本?

显然...

@Modifying
@Transactional
@Query("UPDATE MyEntity SET deletedAt = CURRENT_TIMESTAMP WHERE id = ?1")
MyEntity markAsSoftDeleted(long id);

...不起作用,因为...

java.lang.IllegalArgumentException: Modifying queries can only use void or int/Integer as return type!

有没有人知道另一种方法可以轻松实现这一点,当然除了明显的“在存储库和调用者之间为此类事情添加一个服务层”......

最佳答案

在@Modifying 注释上设置clearAutomatically 属性。这将从EntityManager 中清除所有未刷新的值。

@Modifying(clearAutomatically=true)
@Transactional
@Query("UPDATE MyEntity SET deletedAt = CURRENT_TIMESTAMP WHERE id = ?1")
void markAsSoftDeleted(long id);

要在提交更新之前刷新您的更改,最新的 spring-data-jpa 在 @ModifyingAttribute 上有另一个属性。但我认为它仍在 2.1.M1 版本中。

@Modifying(clearAutomatically=true, flushAutomatically = true)

请检查相应的 jira 错误请求:https://jira.spring.io/browse/DATAJPA-806

另一种方法是您可以实现自定义存储库实现并在完成查询执行后返回更新后的实体。

引用:Spring data jpa custom repository implemenation

关于java - Spring Data Repository @Query - 更新并返回修改后的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49690671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com