【问题标题】:JPA - Persisting LOB properties on PostgresqlJPA - 在 Postgresql 上持久化 LOB 属性
【发布时间】:2012-02-23 01:50:20
【问题描述】:

我有一个这样定义的字段

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 什么?

【问题讨论】:

    标签: java postgresql jpa orm


    【解决方案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可序列化类型。

    【讨论】:

    • 什么是“Hibernate 可序列化类型”??
    • 通过这个解决方案,我可以在数据库字段中获得数字。
    【解决方案2】:

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

    【讨论】:

    • 有了这个提示,我不再得到异常,但是数据库中的列是空的,我知道该列应该包含数据。
    【解决方案3】:

    我如何解决我的问题:

    @Column(length=100000)
    private String details;
    

    【讨论】:

      猜你喜欢
      • 2013-11-12
      • 2013-11-06
      • 2012-07-02
      • 1970-01-01
      • 2016-07-07
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多