JPA - 在Postgresql上保留LOB属性

时间:2012-01-31 10:25:50

标签: 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)]

该表尚未存在于数据库中。

我应该告诉Hibernate什么?

3 个答案:

答案 0 :(得分:4)

这是我如何解决我的问题:

@Column(length=100000)
private String details;

答案 1 :(得分:1)

@Lob表示该属性应保留在Blob或Clob中,具体取决于属性类型:java.sql.ClobCharacter[]char[]java.lang.String将坚持在Clob。 java.sql.BlobByte[]byte[]Serializable类型将保留在Blob中。

@Lob
public String getFullText() {
    return fullText;
}

@Lob 
public byte[] getFullCode() {
    return fullCode;
}

如果属性类型实现java.io.Serializable并且不是基本类型,并且该属性未使用@Lob注释,则使用Hibernate可序列化类型。

答案 2 :(得分:1)

由于您正在使用postgresql,因此最简单的方法是将列映射为普通clob而不是nclob,因为postgresql没有单独的nvarchar等类型。