Habitat Framework

专注于Java EE企业级开发
posts - 13, comments - 81, trackbacks - 0, articles - 5
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Spring或Hibernate其实都提供了透明处理Clob的方法
只是个人觉得用Spring的做法比hibernate更透明一点(hibernate2.16);
具体做法为:
1.在sessionFactory中加入lobHandler的注射:

<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="lobHandler" ref="lobHandler"/>
        <property name="mappingResources">
                  <value>xxx.hbm.xml</value>
                  .....
         </property>
</bean>

2.定义这个lobHandler,值得注意的是这里有Oracle的版本区别:

<bean id="lobHandler" lazy-init="true"   class="org.springframework.jdbc.support.lob.OracleLobHandler">
        <property name="nativeJdbcExtractor">
            <ref bean="nativeJdbcExtractor"/>
        </property>
</bean>

<bean id="nativeJdbcExtractor" lazy-init="true"   class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>

因为Oracle9i处理Clob的方式和别的数据库很不一样,甚至与Oracle10g都不兼容,所以这里要用spring提供的SimpleNativeJdbcExtractor.如果使用Oracle10g的话,可以直接使用:

<bean id="lobHandler" lazy-init="true"  class="org.springframework.jdbc.support.lob.DefaultLobHandler"/>

对应的应该使用Oracle10g对应的JDBC驱动.

4.在领域对象的hbm中对应的Clob字段应该使用这样的定义:

<property name="context" column="context" type="org.springframework.orm.hibernate.support.ClobStringType" length="1048576000"/>

这里的length是字节了,不是长度哦,最大可以设到2G.对应的,该字段在领域对象中直接申明成String就可以了.当对这个字段写入长数据时直接调用其set方法就可以了,Spring会自己帮你做余下的处理,让你透明的处理Clob字段.

5.业务逻辑层对该字段的操作必须需要在有事务管理的方法中使用,否则会报:
java.lang.IllegalStateException: Active Spring transaction synchronization or active JTA transaction with 'jtaTransactionManager' on LocalSessionFactoryBean required 这个错误


评论

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2007-07-24 16:03 by mao_lu
如何修改clob字段呀
我的插入没问题
修改报java.lang.IllegalStateException: Active Spring transaction synchronization or active JTA transaction with 'jtaTransactionManager' on LocalSessionFactoryBean required 这个错误

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2007-07-24 17:46 by Kerwin Weng
理论上出现这种问题主要是因为hibernate的Session已经关闭,造成你的修改操作是在没有事务的环境下提交的,所以就会报这种错,如果你的插入和修改代码几乎完全一样,可能就要详细检查你的配置和所选用的驱动了,如果方便留下你的MSN,我加你

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2007-08-14 08:48 by mao_lu
很感谢你的回复,我的问题还是没有解决,我的QQ:358131961
向你请教

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2007-08-15 19:45 by 李瑞宏
你好,我也报上面的错误,能加我吗? qq:278241728
msn:lrh165@hotmail.com

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2007-09-17 15:34 by yys
me too!

msn:chris-in@hotmail.com
QQ:282842044

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2007-09-29 18:26 by 能加我吗?我也是这个问题
能加我吗?我也是这个问题~
QQ:39800425

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2007-10-19 16:37 by
我也碰到这个问题,搞了半天解决不了,盼帮忙
QQ:52332092

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2007-12-11 21:28 by 圣殿
你好,我也遇到这个问题,在上传的时候遇到
Active Spring transaction synchronization or active JTA transaction with 'jtaTransactionManager' on LocalSessionFactoryBean required
这样的错误,你上面的所说的解决办法是:.业务逻辑层对该字段的操作必须需要在有事务管理的方法中使用,我不理解,请多关照哈小弟哦,小弟是初学
我的QQ是:345910534

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2008-01-08 11:17 by Strive
兄弟我的问题是: 连接 数据库都不能连上报 NLS 参数无效. 真是头疼. 有解不? QQ:132175958 email:infosys@163.com

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2008-01-08 15:12 by Kerwin
抱歉,我也没有遇到过

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2008-01-23 10:58 by yangyi336
我是有Spring+hibernate+Oracle环境下的Blob字段处理方式
但老是报错
能否指点它们在哪里不同吗
能否把您的项目发给我一份吗
谢谢
yangyi336@163.com

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2008-01-23 11:03 by Kerwin.Weng
具体错误具体分析,我以前的代码是别人的产品不可以发

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2008-03-21 10:48 by sunxinghua
我的插入操作没问题,修改操作报了您文中提到的那个EXCEPTION~
我的插入和修改的方法都配置了事务,而且代码基本一样,主要是插入操作最后调用的是this.getHibernateTemplete.save(),修改方法改的是....update()方法~`
请指教:
MSN:xinghuasun666@163.com

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2008-03-21 11:31 by Kerwin.Weng
getHibernateTemplete.save()的session可能和当前session不同的,尤其在OpenSessionInView的情况下

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2008-12-24 23:14 by yin_bp
http://blog.csdn.net/yin_bp/archive/2008/12/24/3599469.aspx

bboss persistent 1.0.2中方便地实现大字段(clob,blob)的处理

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]  回复  更多评论   

2010-09-03 22:38 by emlynswannd@yahoo.com
HEY CRAZY ROBOT !!

remeber me ? im Emyln :D

# re: Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创][未登录]  回复  更多评论   

2010-10-09 16:46 by ln
太感谢啦,找了好多方法都没有解决问题,终于从你这找到答案啦

只有注册用户登录后才能发表评论。


网站导航: