jpa 列表字段的HibernateMap异常

jxct1oxe  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(118)

我有一个oracle表MYTABLE,它有3列,如下所述。

|id | myclob_column | column3|

它有一个列(myclob_column),是clob数据(json)。样本clob数据如下。

{
"id" : 10001
"name" : "Rahul",
"keyvalue" : [ {"key" : "100", "value" : "A"}, {"key" : "200", "value" : "B"} .....]
}

KeyValue在我的项目中被定义为一个类,如下所示。

@Data
public class KeyValue {

 private String key;
 private String value;

}

我在namekeyvalue字段上使用org.hibernate.annotations.Formula注解。

@Data
@Entity
@Table(name = "MYTABLE")
public class MyEntity {

@Id
private String id;

@Formula("JSON_VALUE(myclob_column, '$.name')")
private String name;

@Formula("JSON_VALUE(myclob_column, '$.keyvalue[*]')")
private List<KeyValue> keyvalue;

}

在运行Spring Boot应用程序时,我收到keyvalue字段的错误,应用程序无法启动。

org.hibernate.MappingException: Could not determine type for: java.util.List, at table: MYTABLE, for columns: [org.hibernate.mapping.Formula(JSON_VALUE(myclob_column, '$.keyvalue[*]'))]

你能告诉我是什么问题吗?

vlju58qv

vlju58qv1#

好吧,如果你使用的是Hibernate 5,它没有内置的JSON到List s的Map支持,我真的不知道是什么给了你这样的印象。
原则上,您可以自己编写一个UserType来处理这个问题。(甚至有可能使用JPA AttributeConverter解决这个问题,但如果不亲自尝试,我无法确定。
现在,在Hibernate6中,情况有点不同,实际上支持将一些集合Map到JSON。例如,支持以下 *:

@JdbcTypeCode(JSON)
List<String> point;

但是,从Hibernate 6.2开始,元素类型必须是基本类型。目前还不支持Map,比如List<KeyValue>,其中KeyValue是一个可嵌入类型。我希望克里斯蒂安或其他人最终会致力于此,但今天还没有。
因此,简单的回答是,您尝试做的事情在任何版本的Hibernate中都不直接支持,但您应该能够使用UserType使其工作。

相关问题