为什么需要clob/blob对象?
在实际的项目开发过程当中,有时候需要存取比较大的数据。而在oracle中,varchar2的长度不能够满足需求,因此就得需要用到clob/blob。
BLOB/CLOB在HIBERNATE中的如何应用?
为了更好的理解,我们举一个文章发布的例子做为讨论。
实体类(POJO)MessageArticle
........................
private Clob content1;
private String content;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Clob getContent1() {
return content1;
}
public void setContent1(Clob content1) {
this.content1 = content1;
}
........................
配置文件(*.hbm.xml)
<property name="content1" type="clob">
<column name="CONTENT" />
</property>
CURD实现(保存和修改):
String content = request.getParameter("content");
MessageArticle article1 = new MessageArticle();
............................
Integer articleid = (Integer)getHibernateTemplate().save(article1);
try {
MessageArticle article = (MessageArticle)getHibernateTemplate().load(MessageArticle.class, articleid, LockMode.UPGRADE);
oracle.sql.CLOB clob = (oracle.sql.CLOB) ((SerializableClob)article.getContent1()).getWrappedClob();
java.io.Writer pw = clob.getCharacterOutputStream();
pw.write(content);
pw.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException ex){
ex.printStackTrace();
}
//读取
........................
MessageArticle article = (MessageArticle)getHibernateTemplate().load(MessageArticle.class, articleid, LockMode.UPGRADE);
Clob clob = article.getContent1();
if (clob != null) {
String content = clob.getSubString(1, (int) clob.length());
article.setContent(content);
}