【发布时间】:2015-11-20 09:51:16
【问题描述】:
我想使用 Java、Spring Data/MVC/DI 和 Hibernate 开发一个 CMS,定义了类似 REST 的 API。
我有以下模型实体:
- 有多个
Articles - 每篇文章有多个
Sections - 每个部分都可以有子部分和/或
Item
所有这些实体都有自己的属性(例如名称、类型等),但很明显,它们指的是它们的聚合实体。我需要为每个这样的实体定义 CRUD API 方法。
我决定偏离教条式的 REST,当我进行修改时,我只需要传入特定于实体的属性(如名称、类型等),但不会影响聚合。因此我有这样的端点:
- 发布
/articles- 创建一篇文章,没有部分 - put
/articles/{article_id}- 更新基本文章属性,不影响部分 - 发布
/articles/{article_id}/sections- 在文章中创建一个部分 - 删除
/articles/{article_id}/sections/{section_id}- 从文章中删除该部分 - put
/articles/{article_id}/sections/{section_id}- 更新基本部分属性,不影响拥有的文章属性,也不影响聚合的部分和项目 - 等等……
所以我的问题是:
当我收到修改请求时,我会获得元素的所有基本属性以及拥有实体标识符。我怎样才能有效地将它们与数据库中现有的关系结合起来,以便我保留所有它们并修改基本属性,而无需逐一复制所有属性。这是文章-部分关系的示例。
public void modifySection(int articleId, int sectionId, Section section) {
assert(article.owns(sectionId));
Section dbSection = sectionDao.findOne(sectionId);
copyOverProperties(section, dbSection); // this is the thing I do not know how to do
sectionDao.save(dbSection);
}
【问题讨论】:
-
Hibernates 合并方法会为你做到这一点。
-
@WeareBorg - 请给我链接。随意发布答案
-
@AlanHay 也没有,因为我面临两个相同类型的实例
标签: java spring hibernate rest