我有一个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;
}
我在name
和keyvalue
字段上使用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[*]'))]
你能告诉我是什么问题吗?
1条答案
按热度按时间vlju58qv1#
好吧,如果你使用的是Hibernate 5,它没有内置的JSON到
List
s的Map支持,我真的不知道是什么给了你这样的印象。原则上,您可以自己编写一个
UserType
来处理这个问题。(甚至有可能使用JPAAttributeConverter
解决这个问题,但如果不亲自尝试,我无法确定。现在,在Hibernate6中,情况有点不同,实际上支持将一些集合Map到JSON。例如,支持以下 *:
但是,从Hibernate 6.2开始,元素类型必须是基本类型。目前还不支持Map,比如
List<KeyValue>
,其中KeyValue
是一个可嵌入类型。我希望克里斯蒂安或其他人最终会致力于此,但今天还没有。因此,简单的回答是,您尝试做的事情在任何版本的Hibernate中都不直接支持,但您应该能够使用
UserType
使其工作。