hibernate如何读取clob字段值(高分送上)

sole_lodestar 2005-12-21 02:11:24
一个channel下有多个document,如何通过channel得到其下所有的document呢?
Document.java

private Integer Id;
private String DocTitle;
private Clob DocContent;
private Integer DocType;
private Integer ChnlId;

Document.hbm.xml
<id name="Id" type="java.lang.Integer">
<generator class="sequence">
<param name="sequence">DOCUMENT_SEQUENCE</param>
</generator>
</id>
<property name="DocTitle" type="java.lang.String" length="1000" not-null="true"/>
<property name="DocContent" type="clob" update="true" insert="true" />
<property name="DocType" type="java.lang.Integer" not-null="true"/>
<property name="ChnlId" type="java.lang.Integer" not-null="true"/>

Document.DAO

public List getDocList( int DocChannel, int num ) {
List retList = null;
Session sess = null;
try {
sess = HibernateUtil.currentSession();
Transaction tx = sess.beginTransaction();
Query q = sess.createQuery
("from com.form.channel.WDocument wd " +
"where wd.ChnlId=? ");
q.setMaxResults( num );
q.setInteger( 0, DocChannel );
if (q.list().isEmpty() == false) {
retList = q.list();
}
tx.commit();
//log
logger.info("(取得文档集合["+DocChannel+"]执行正常)");
} catch (HibernateException he) {
//log
logger.error("(取得文档集合["+DocChannel+"]执行异常)", he);
new org.hibernate.HibernateException("getById("+DocChannel+"):"+he);
} finally {
try {
HibernateUtil.closeSession();
} catch (HibernateException he) {
new org.hibernate.HibernateException(
"HibernateUtilServlet.closeSession()");
}
}
return retList;
}
...全文
646 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sole_lodestar 2006-01-02
  • 打赏
  • 举报
回复
抱歉啊,这个问题早已解决,不过还是感谢 mxlmwl(飞星)的解答。
具体做法:
映射文件中如下:
<property name="DocContent" type="text" not-null="true"/>
lib下:
加入ojdbc14.jar替换低版本的jar包。
mxlmwl 2005-12-29
  • 打赏
  • 举报
回复
呵呵,给你一些参考。
1。也是最基本的clob的存取,实际上和jdbc实现原来差不多。这种代码在网上有很多,先创建一个空clob,然后在向其中写入数据,这个估计你也能找到。

2。利用Spring实现
将String类型在hbm文件中对应org.springframework.orm.hibernate.support.ClobStringType来实现。具体需要在Spring配置文件中配置
<bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor"><ref local="nativeJdbcExtractor"/></property>
</bean>
等,这个你具体找下网上的帮助就可以了。

3。自己定义个类型来对应,这是利用hibernate来自己定义类型(继承它的UserType类)。hibernate的wiki中有一篇文章叫做《Using Clobs/Blobs with Oracle and Hibernate》,里面写的非常详细。(具体地址我记不清楚了,但是文档我已经下到硬盘里了)实际上这种方法和第二种相差不多。只不过第二种实际上用的是Spring来继承的hibernate进行自定义类型的写法。

对于2,3方法,一般都需要用oracle9才能支持,而且要9.2.0.0以上版本的jdbc驱动才可以。oracle的驱动很是麻烦,感觉比mysql强不到哪去。

至于oracle10G嘛,据说是可以直接对clob进行存取,我没装过(很久不用oracle了),不敢断言,你可以试试看。
zeq258 2005-12-29
  • 打赏
  • 举报
回复
关注下
sole_lodestar 2005-12-22
  • 打赏
  • 举报
回复
debug状态下可以读到clob内容,真正运行起来就读不到了(null),这是啥原因?
sole_lodestar 2005-12-21
  • 打赏
  • 举报
回复
恭候楼上的解答,虽然问题已解决。
mxlmwl 2005-12-21
  • 打赏
  • 举报
回复
参考spring的做法。一共有三种做法,我现在在外面出差,相关资料没带,呵呵,回去告诉你。
sole_lodestar 2005-12-21
  • 打赏
  • 举报
回复
private Clob DocContent;==>private String DocContent;
<property name="DocContent" type="clob" update="true" insert="true" />==>

<property name="DocContent" type="java.lang.String" update="true" insert="true" />

不过我的DocContent取出来却是null,郁闷ing……
sole_lodestar 2005-12-21
  • 打赏
  • 举报
回复
ding

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧