java 生成mysql dto_java – JPA模式:从Entiy生成数据传输对象DTO,并将DTO合并到数据库...

我正在寻找从JPA实体创建数据传输对象(DTO)的好方法,反之亦然.

我想将DTO作为

JSON发送给客户端,然后接收修改的DTO并将其保存回数据库.

在从DOM接收到的对象被解析为Java类之后,从接收到的对象的EntityManager执行合并方法是最容易的.

例如,存在以下实体和用于保存修改的对象的Rest方法:

@Entity

@Table(name="CUSTOMER")

public class Customer {

@Id

Long id;

@Version

Long version;

String name;

String address;

String login;

String password;

String creditCardNumber;

@OneToMany(cascade = CascadeType.ALL)

List fooList;

... Getter() and Setter()

}

private EntityManager em;

@POST

@Path("/saveCustomer")

public void saveCustomer ( Customer customer) {

em.merge(customer);

return;

}

只要我将整个实体类作为JSON发送并接收整个Entity,这样工作正常.然后,EntityManager将将修改的对象合并到数据库.但是当我只想提供实体的一个子集(就像客户的名字和地址一样)会有问题:

>创建实体子集的最佳方法是什么?

– 用手为实体的DTO打电话吗?这将为实体的每个子集生成重复的代码,必须进行维护.

>如何将属于实体的子集的DTO合并回数据库?

– 使用EntityManager的merge()方法不起作用.起初,DTO不是实体,所以不能合并.并且只要从DTO创建一个实体,将在实体中有一些未设置的值.合并后,数据库中的值将为NULL.

我想出的一个想法是为每个要实现的子集指定其他实体. (像数据库视图一样)这将是重复的代码,但它可以解决将DTO合并到数据库中的问题. (也许这个代码可以自动生成)

例如,Entity CustomerView1链接到与Customer类相同的表,但仅提供客户的名称和地址.它是真正的Customer类的DTO,可以作为JSON发送并在服务器之外进行修改.然后,该类也可以由EntityManager合并到数据库.

@Entity

@Table(name="CUSTOMER")

public class CustomerView1 {

@Id

Long id;

@Version

Long version;

String name;

String address;

... Getter() and Setter()

}

但是我对这个解决方案有疑问,我不知道这是否会混淆JPA缓存实体,可能会导致一些问题.

我的问题是,是否有一种模式来解决DTO的代码重复,并将DTO合并回数据库?

还是有图书馆为此目的? – 像DTO的自动生成一样,将DTO复制回真实实体,可以将它们与EntityManager进行合并.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值