8

假设我有一个类:

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(字符串数据);

谢谢,

4

3 回答 3

17

Do this

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

public String getDataXML() {
   return dataXML;
}

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

So there is no need to convert, and everything is done by Hibernate.

I showed it using annotations, the same thing can be done using .hbm.xml files.

于 2013-05-20T03:35:29.203 回答
5

这是我很久以前将 Clob 转换为字符串的代码。它旨在用于实用程序类。

    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());
于 2013-05-20T03:08:00.570 回答
0

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

工作代码摘录:

实体:

private String xml;

SQL(甲骨文):

XML       CLOB,

休眠映射:

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

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

实体:

private byte[] xmlFile;

SQL(甲骨文):

XML       BLOB,

休眠映射:

<property name="xmlFile" type="java.io.File">
    <column name="XML" />
</property>
于 2013-05-20T09:01:28.553 回答