我正在将我的Quarkus项目从经典的Hibernate ORM迁移到Hibernate Active,我遇到了一个JSONB字段Map的问题。
以下是实体:
@Entity
@TypeDef(name = JsonTypes.JSON_BIN, typeClass = JsonBinaryType::class)
class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "myEntityIdGenerator")
@SequenceGenerator(name = "myEntityIdGenerator", sequenceName = "my_entity_id_seq", allocationSize = 10)
var id: Long? = null
// Usage of a plain JsonNode instead of a mapped class is intentional,
// as the app receives a request with raw JSON data and should store it without any processing
@Type(type = JsonTypes.JSON_BIN)
@NotNull
lateinit var jsonData: JsonNode
}
该项目具有处理JSON类型的io.quarkiverse.hibernatetypes:quarkus-hibernate-types:0.2.0
依赖项。
这段代码可以很好地阻止Hibernate API,但当尝试使用HibernateReact来持久化MyEntity
时,我得到了以下异常:
io.vertx.core.impl.NoStackTraceThrowable: Parameter at position[1] with class = [com.fasterxml.jackson.databind.node.ObjectNode] and value = [{"field1":"some value"}] can not be coerced to the expected class = [java.lang.Object] for encoding.
这是一个错误,还是在使用HibernateReact性时应该以不同的方式处理自定义类型?
1条答案
按热度按时间5tmbdcev1#
休眠类型与休眠React性不兼容。
但是您有三个选项来Map一个Json和HibenrateReact性:
1.使用
io.vertx.core.json.JsonObject
1.将其Map为字符串并使用转换器
1.创建UserType
1.JsonObject
io.vertx.core.json.JsonObject
示例:您可以在存储库中看到一个正在运行的示例:JsonTypeTest
2.使用转换器
使用转换器的示例:
您可以在存储库中看到一个正在运行的示例:JsonTypeTest
3.用户类型
您可以在存储库中看到一个正在运行的示例:UserJsonTypeTest