hibernate Kotlin使用hib/Jackson等库中的值类

wxclj1h5  于 2023-02-23  发布在  Kotlin
关注(0)|答案(1)|浏览(139)

有没有办法让Kotlin值类(更新的内联类)与Jackson和Hibernate这样的库一起工作,并让它们将值类简单地视为底层类型?
目前,我收到一堆错误,说该类型没有默认构造函数(这是有意义的,因为据我所知,它实际上只是底层类型的 Package 器)。
我得到的所有异常都是运行时错误,所以在编译时没有警告会发生这种情况。
我假设这些问题是相关的,因为在这两种情况下,我都会收到错误消息,指出类型缺少空构造函数。
我很抱歉,如果我的问题是有点不清楚,我一直在挖掘这个数小时没有真正取得任何进展。
我想要完成的是(例如对于hib):

value class Name(val name: String)

@Entity
@Table(name = "my_table")
class MyTable(
  @Id
  @Column(name = "id")
  @GeneratedValue(strategy = GenerationType.AUTO)
  val id: UUID = UUID.randomUUID(),

  @Column(name = "name", nullable = false)
  val name: Name = Name("John")
)

并让它在与数据库通信时将name简单地视为字符串。
我使用基于http 4k和Jackson的堆栈进行REST通信,并且在表单上有请求/响应实体

data class MyRestObject(val id: UUID, val name: Name)

这和我对响应的预期一样,生成的响应json看起来像:

{
  "id": UUID,
  "name": String
}

但是,它不适用于请求。
Jackson的例外示例:Cannot construct instance ofcomponent.Name(no Creators, like default constructor, exist): no String-argument constructor/factory method to deserialize from String value ('foerijfm')

irlmq6kh

irlmq6kh1#

对于Jackson,可以使用@JsonCreator注解来注解要使用的构造函数。或者,可以为ObjectMapper中的类型注册Deserializer
对于Hibernate ORM,您可以使用JPA属性转换器。

相关问题