在Hibernate中将String转换为Clob,反之亦然

时间:2013-05-20 02:37:06

标签: string hibernate clob

假设我有一个班级:

class EventTransaction {
    .....
    private Clob dataXML;

    public Clob getDataXML() {
       return dataXML;
    }

    public void setDataXML(Clob dataXML) {
       this.dataXML = dataXML;
    }
}

和Hibernate映射xml:

 <property name="dataXML" type="java.sql.Clob">
        <column name="XML" sql-type="CLOB"/>
 </property>

在java代码中,如何将String转换为Clob,反之亦然,以保存到数据库中:

Ex: EventTransaction et = new EventTransaction();
    String xml = "fdfsafafafa";
    et.setDataXML(convertStringToClob(xml));
    HibernateTemplate.saveOrUpdate(et);

请问你如何实现函数 convertStringToClob (字符串数据);

谢谢,

3 个答案:

答案 0 :(得分:14)

这样做

@Column(name='xml')
@Lob
private String dataXML;

public String getDataXML() {
   return dataXML;
}

public void setDataXML(String dataXML) {
   this.dataXML = dataXML;
}

所以没有必要转换,一切都是由Hibernate完成的。

我使用注释显示它,使用.hbm.xml文件可以完成同样的事情。

答案 1 :(得分:5)

这是我很久以前将Clob转换为String的代码。它意味着在实用程序类中使用。

    public static String convertClobToString(Clob clob) throws IOException, SQLException {
            Reader reader = clob.getCharacterStream();
            int c = -1;
            StringBuilder sb = new StringBuilder();
            while((c = reader.read()) != -1) {
                 sb.append(((char)c));
            }

            return sb.toString();
     }

如果我没有弄错,要创建一个Clob,你会做这样的事情

     Clob myClobFile = new SerialClob("my string".toCharArray());

答案 2 :(得分:0)

当您将XML列声明为VARCHAR(而不是Java String)时,数据库端有64000个字符的限制,因此只要您的列XML是CLOB,它就可以工作。

摘录工作代码:

实体:

private String xml;

SQL(ORACLE):

XML       CLOB,

Hibernate映射:

<property name="xml" type="java.lang.String">
    <column name="XML" length="999999" />
</property>

如果要将XML存储为文件,则应该使用BLOB,如下所示:

实体:

private byte[] xmlFile;

SQL(ORACLE):

XML       BLOB,

Hibernate映射:

<property name="xmlFile" type="java.io.File">
    <column name="XML" />
</property>