私がクラスを持っているとしましょう:
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);
ありがとう、
これを行う
@Column(name='xml')
@Lob
private String dataXML;
public String getDataXML() {
return dataXML;
}
public void setDataXML(String dataXML) {
this.dataXML = dataXML;
}
したがって、変換する必要はなく、すべてがHibernateによって実行されます。
注釈を使用して示しましたが、.hbm.xml
ファイルを使用しても同じことができます。
これは、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());
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>