@hunter129

天天学习,好好向上!

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  21 随笔 :: 5 文章 :: 37 评论 :: 0 Trackbacks
项目中用到 长文本作为内容
pojo中使用 string 类型 数据 oracle9i 用的的clob字段
pojo:

private String content;
public void setContent(String content){
    
this.content = content;
}
hibernate配置
<property name="content" column="C_Content" type="text" length="10000"></property>

发现当content 字段的内容在 1000~2000 字符长度中间的时候出现 sql错误
而文本长度小于1000 长于2000 都没有问题
问题:hibernate配置中length="10000"属性是做什么用的?我尝试过 将他配置成1000,5000,1w或者不配置 最后执行的结果都一样

资料 google baidu。。。
一般认为 length指定的是text的最大长度,这里显然不是
又有认为 是将java中string 值当作clob处理的最小长度,也就是当string长度小于这个值的时候 当string处理,当string大于这个长度的时候当text(clob)处理。但是我将length设置为1000时,输入1k+文本 依然有sql错误。超过2000却没有问题。
so..这两个都不是答案.
又有人说,介个是jdbcbug 换成10g的就米有问题了。遂尝试..未果,问题依旧。
finally..这个length属性到底干嘛用 没搞清楚.. 抑或 不该这么配置?

继续寻找,找到另外一种解决办法。可以通过spring来解决这个问题
hibernate配置
<property name="content" column="C_Content" type="org.springframework.orm.hibernate3.support.ClobStringType"
length
="10000"></property>

spring配置
<bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">   
        
<property name="nativeJdbcExtractor">
            
<ref local="nativeJdbcExtractor"/>
        
</property>  
</bean>   
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor">   
</bean>
上面2个bean是关键
然后在sessionFactory的bean中加入
<bean id="sessionFactory"
        class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        
<property name="lobHandler">   
            
<ref bean="oracleLobHandler" />   
        
</property>
        。。。其他
</bean>


问题解决,但是length="10000" 属性依然无用,可正常插入 任意长度的字符串
但是这样的话 数据库就不能跨平台了..so 期待跨数据库平台的 方案~~
posted on 2008-01-28 15:48 hunter129 阅读(4180) 评论(7)  编辑  收藏 所属分类: 基础

评论

# re: hibernate 映射 clob字段 2008-02-22 14:55 杨爱友
根据我的感觉,hibernate配置里所有的length在程序中都是没用的,可有可无,他的作用好象是在必要的时候生成数据库用。  回复  更多评论
  

# re: hibernate 映射 clob字段 2008-03-04 13:33 落Nicety
@杨爱友
恩 貌似是给那些 根据hibernate配置文件生成 sql的工具用的~~
不过还没找到官方的说明~~  回复  更多评论
  

# re: hibernate 映射 clob字段 2008-06-03 19:28 使用该方法
按照您说的做了 报c3P0的错误   回复  更多评论
  

# re: hibernate 映射 clob字段 2008-06-03 21:23 落Nicety
@使用该方法
是不是其他地方配置的不对?有没有详细点的错误信息  回复  更多评论
  

# re: hibernate 映射 clob字段 2008-10-20 17:31 膚,淺 ヽ
按你说的做了,但是我的添加和修改都不能用啦!我已添加或者修改老报错!  回复  更多评论
  

# re: hibernate 映射 clob字段 2008-10-20 17:32 膚,淺 ヽ
是type Exception report 500

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.lang.IllegalStateException: Active Spring transaction synchronization or active JTA transaction with specified [javax.transaction.TransactionManager] required
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
  回复  更多评论
  

# re: hibernate 映射 clob字段 2008-10-27 14:41 落Nicety
@膚,淺 ヽ
看异常信息 应该是没有配置事物管理器
加上这个配置
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
<property name="nestedTransactionAllowed"> <value>true</value> </property>
</bean>  回复  更多评论
  


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


网站导航: