如何在kotlin中将实体优雅地转换为dto?

zsohkypk  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(270)

我正在开发kotlin+springbootweb服务,我想用最方便的方式将dto转换成实体。
实体:

@Entity
data class Shop(
   @Id
   @GeneratedValue
   val id: Long,
   val name: String
   @OneToOne
   val owner: User,
   ...
)

@Entity
data class User(
   @Id
   @GeneratedValue
   val id: Long,
   val name: String,
   ...
)

dto公司:

data class ShopDTO(
   val id: Long,
   val name: String,
   val ownerId: Long,
   val ownerName: String,
   ...
)

因此,当有人想要创建一个新的商店时,我的服务得到一个shopdto(name,ownerid)作为请求主体,然后我需要将它转换成shop对象,以便能够将它保存到db中。下面是我的Map器函数的样子:

fun fromDTO(source: ShopDTO) = Shop(
   id = source.id,
   name = source.name,
   owner = ???,
   ...
)

我只需要一个id就可以和一个店主一起存储一个商店。用给定的ownerid创建一个新用户就足够了。为此,我尝试了以下解决方案:
向用户类中的字段添加默认值。
使字段为空。
添加二级构造函数。这也需要默认值。
使用一些反射魔法创建一个空对象,然后设置id。
使用给定的id调用userrepository上的findbyid方法。
我想保留实体的非空、不可变字段,不想使用反射。也不想运行一个不必要的selectdb查询,只是为了通过id返回用户。
你能给我建议其他的选择吗?你将如何处理这种情况?kotlin中有没有好的mapper框架可以解决这个问题?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题