一尘不染

我应该在休息请求和/或响应中使用jpa实体吗

hibernate

我有一种情况,我可以将JPA实体作为休息请求发送和/或获取JPA实体作为休息响应

@RequestMapping(value = "/products", method = RequestMethod.POST)
public @ResponseBody ProductDetailsResponse createNewProduct(@RequestBody ProductDetails newProduct)
        throws Exception {

ProductDetails 是一个实体

@Entity
@Table(name = "product")
public class ProductDetails {

我应该使用它,还是从实体到另一种对象进行某种转换


阅读 224

收藏
2020-06-20

共1个答案

一尘不染

没有硬性规定可以将JPA实体用作DTO(数据传输对象),但这不是一个好习惯(出于很好的理由和观点)。

除了DTO在规模上是实体的轻量级版本之外,还有其他优点。

我意识到的这样的优势之一就是关系的版本更浅,例如对于一对多单向关系,您的子实体也将引用您的父实体,但是您可以在DTO中断开该链,因此避免了很多JSON转换和无限循环相关问题。

我发现在DTO级别比从实体级别更容易进行JSON到Object的转换(反之亦然),因为实体表示数据库图而不是客户端业务图。

一个简单的通用实用程序类进行转换(从DTO到Entity,反之亦然)就足够了。您可以按照此处所述使用模型映射器API 。

我不让实体跨越服务层边界,它的所有DTO都在控制器上,而我不在控制器上进行转换。

附加的样板代码是DTO方法的一个缺点。

2020-06-20