web-dev-qa-db-ja.com

HibernateでStringを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コードで、文字列をClobに、またはその逆に変換してデータベースに保存する方法:

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

関数の実装方法を教えてくださいconvertStringToClob(String data);

ありがとう、

8
hoang nguyen

これを行う

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

public String getDataXML() {
   return dataXML;
}

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

したがって、変換する必要はなく、すべてがHibernateによって実行されます。

注釈を使用して示しましたが、.hbm.xmlファイルを使用しても同じことができます。

14
Amir Pashazadeh

これは、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());
5
george_h

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>
0
Taoufik Mohdit