我熟悉几种解决这个问题的方法,但可能我缺少一些真正有用的东西:
我有一个API实体:
data class SomeApiEntity(
val id: Long? = null,
@field:NotBlank
val name: String,
val someIntData: Long,
)
同时Spring JPA实体:
@Entity(name = "some_entity")
class SomeEntity(
@field:NotBlank
@Column(name = "name", nullable = false)
val name: String,
@Column(name = "some_int_data", nullable = false)
val someIntData: Long,
) {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
var id: Long? = null
}
现在我需要想出一种将这些实体从一种转换为另一种的方法。
最流行的解决方案是在这些实体中实现以下方法:
SomeApiEntity
中的一个示例:fun toApiEntity(): SomeApiEntity = SomeApiEntity(
id,
name,
intData,
)
还有一个在SomeEntity
类中的。
fun toEntity(): SomeEntity = SomeEntity(
name,
intData
)
但我发现这种解决方案不成功且可扩展性差。
对于大型实体,特别是具有转换逻辑的实体,尤其是如果其他Spring Beans在那里使用,就可以进行测试。好吧,像这样的小实体与大实体变得统一了。
我知道在Spring中实现
Converter<S,T>
接口的解决方案,但它也不好,因为它只解决了单向转换,并且在未来需要编写的代码量上增加了一些额外开销。