Java JPA-在Postgresql上持久化LOB属性
我有一个这样定义的字段Java JPA-在Postgresql上持久化LOB属性,java,postgresql,jpa,orm,Java,Postgresql,Jpa,Orm,我有一个这样定义的字段 private java.sql.NClob details; 当我尝试构建以创建实体管理器时,出现以下异常: Caused by: org.hibernate.MappingException: Could not determine type for: java.sql.NClob, at table: messages, for columns: [org.hibernate.mapping.Column(details)] 该表在数据库中尚不存在 我应该告诉H
private java.sql.NClob details;
当我尝试构建以创建实体管理器时,出现以下异常:
Caused by: org.hibernate.MappingException: Could not determine type for: java.sql.NClob, at table: messages, for columns: [org.hibernate.mapping.Column(details)]
该表在数据库中尚不存在
我应该告诉Hibernate什么?
@Lob
表示该属性应该根据属性类型持久化到Blob或Clob中:java.sql.Clob
,Character[]
,char[]
和java.lang.String
将持久化到Clob中java.sql.Blob
、Byte[]
、Byte[]
和Serializable
类型将保留在Blob中
@Lob
public String getFullText() {
return fullText;
}
@Lob
public byte[] getFullCode() {
return fullCode;
}
如果属性类型实现了
java.io.Serializable
,并且不是基本类型,并且如果属性没有用@Lob
注释,则使用Hibernate Serializable类型。因为您使用的是postgresql,可能最容易将列映射为普通clob,而不是nclob,因为postgresql没有单独的nvarchar等类型。这里是我如何解决问题的:
@Column(length=100000)
private String details;
什么是“Hibernate可序列化类型”?使用此解决方案,我在数据库字段中获得数字。通过此提示,我不再获得异常,但数据库中的列为空,我知道该列应该包含数据。