最佳实践/使用JPA,Hibernate进行以数据为中心的应用程序的通用模式

时间:2018-06-19 18:29:28

标签: hibernate jpa orm

我们目前正在开始实施nee软件,该软件大量使用数据库实体。 您可以将IT视为具有一些其他业务逻辑,验证等功能的数据库编辑器。 我们使用带有jpa,hibernate和jsf的spring boot作为View技术。 一个用例,例如: -搜索实体(显示匹配结果列表) -打开一个实体进行编辑 -更改或添加一些实体道具 -保存或取消编辑模式 -返回显示更新后的实体的列表

在这种情况下,处理实体的良好模式是什么? 我的意思是复制,绑定,更新或还原实体及其更改。

为我们要编辑的实体创建克隆并将其绑定到ui会是一个好主意吗?然后直接更改此实体,并在保存时持久保存/合并它,或者在取消时将其丢弃。

还是我们应该使用更轻量级的DTO,它从原始实体映射到我们并将其绑定到ui?

最后一种可能性是对要打开的实体执行就地编辑。保存之前,更改将不会保留。

有关验证的WhatsApp?直接在实体上定义和使用bean验证是IT的好主意吗?

感谢所有建议

1 个答案:

答案 0 :(得分:2)

恕我直言,这取决于您的情况,但您应该考虑:

  1. 您是否在视图中显示相同的数据?如果没有,请考虑如何分隔BO和DTO。
  2. 前端和后端之间的性能。性能是非功能性要求吗?我的意思是,如果性能至关重要,则只应返回要更改或查看的数据。
  3. DTO是一种模式,有时但并非总是有用:https://martinfowler.com/bliki/LocalDTO.html

其他方面:

  1. 验证:我认为您应该在绑定阶段验证DTO字段,因此弹簧方法是Validator接口:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation 这样,您可以尽快向视图返回错误
  2. 您正在谈论“克隆”对象,但是如果您要重复或开发更多代码,我不同意。您可以选择诸如mapstruct,推土机或orika之类的工具来避免这种情况。

希望对您有帮助。