Flo*_*etz 5 java spring spring-data
假设我们有一个带有自定义方法的Spring Data存储库接口...
@Modifying
@Transactional
@Query("UPDATE MyEntity SET deletedAt = CURRENT_TIMESTAMP WHERE id = ?1")
void markAsSoftDeleted(long id);
Run Code Online (Sandbox Code Playgroud)
此方法只是将实体的deleteAt字段设置为确定。有什么办法允许此方法返回的更新版本MyEntity?
明显...
@Modifying
@Transactional
@Query("UPDATE MyEntity SET deletedAt = CURRENT_TIMESTAMP WHERE id = ?1")
MyEntity markAsSoftDeleted(long id);
Run Code Online (Sandbox Code Playgroud)
...不起作用,因为...
java.lang.IllegalArgumentException:修改查询只能使用void或int / Integer作为返回类型!
有谁知道另一种轻松地允许这种方式的方法,当然,显而易见的是“在存储库和调用者之间添加一个服务层来实现这些功能”……
在@Modifying 注释上设置clearAutomatically属性。这将从 EntityManager 中清除所有未刷新的值。
@Modifying(clearAutomatically=true)
@Transactional
@Query("UPDATE MyEntity SET deletedAt = CURRENT_TIMESTAMP WHERE id = ?1")
MyEntity markAsSoftDeleted(long id);
Run Code Online (Sandbox Code Playgroud)
要在提交更新之前刷新您的更改,最新的 spring-data-jpa 在 @ModifyingAttribute 上有另一个属性。但我认为它仍然在 2.1.M1 版本中。
@Modifying(clearAutomatically=true, flushAutomatically = true)
Run Code Online (Sandbox Code Playgroud)
请查看对应的jira bug请求:https : //jira.spring.io/browse/DATAJPA-806
另一种方法是您可以实现自定义存储库实现并在完成查询执行后返回更新的实体。
| 归档时间: |
|
| 查看次数: |
3919 次 |
| 最近记录: |