【发布时间】:2018-04-24 15:37:02
【问题描述】:
我有实体 Document,它有很多列,与其他一些实体进行一对一、一对多和多对多的映射。
例子:
Document:
id,
title,
body,
authors,
viewers,
...
使用 REST,我想更新一些特定的文档,控制器接收序列化的 Document 对象,调用 EntityManager 的合并方法将 null 结果保存到数据库,如果控制器仅接收到 body ,那么我希望只更新正文,但合并删除标题、作者和查看者等记录。
我知道这是 EntityManager 的标准行为,但我想知道在不从前端或其他端点接收整个实体的情况下,对实体进行更新的最优选技术是什么。我应该使用收到的 id 从数据库加载实体并手动设置所有字段,然后保存到数据库,还是应该使用其他技术。
手动编写所有设置器来复制更改我没有任何问题,但是实体的大小确实很大,有很多关系。在这种情况下寻求最佳实践。
我了解 DTO,但在将实体用于控制器和服务方法时,我想要另一种方法。
【问题讨论】:
-
您可以使用 em.merge 更新 Java 实体中的特定字段(这通过 JPA),或者您可以编写一个 SQL 更新语句来为您执行此操作。基本上,JPA 是一个通过实体管理器的抽象层,位于对关系数据库的 SQL 访问之上。
标签: java spring hibernate rest jpa