问题描述
我正在研究 Kotlin + SpringBoot 网络服务,我想以最方便的方式将 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 ownerId: Long,val ownerName: String,...
)
因此,当有人想要创建一个新商店时,我的服务会获取一个 ShopDTO(name,ownerId) 作为请求正文,然后我需要将其转换为 Shop 对象才能将其保存到数据库中。现在这是我的映射器函数的样子:
fun fromDTO(source: ShopDTO) = Shop(
id = source.id,name = source.name,owner = ???,...
)
为了能够与所有者一起存储商店,我只需要一个 ID。使用给定的 ownerId 创建一个新用户就足够了。 为此,我尝试了以下解决方案:
- 为 User 类中的字段添加默认值。
- 使字段可以为空。
- 添加二级构造函数。这也需要默认值。
- 使用一些反射魔法创建一个空对象,然后设置 id。
- 使用给定的 id 在 UserRepository 上调用 findById 方法。
我想保留实体的非空、不可变字段,不想使用反射。也不想运行不必要的选择数据库查询只是为了通过 id 取回用户。
你能建议我其他选择吗?你会如何处理这种情况? Kotlin 有没有什么好的mapper 框架可以解决这个问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)