Hibernate查询Clob转化问题

在使用Hibernate查询时遇到Oracle数据库返回Clob类型数据的问题,原SQL中的wm_concat()函数在不同版本的Oracle数据库中返回类型不一致。尝试了通过遍历循环和to_char函数解决,但分别出现了效率问题和ORA-22922错误。最后通过转化为SerializableBlobProxy并利用InvocationHandler成功将Clob转换为String,以避免Oracle版本变化带来的影响。
摘要由CSDN通过智能技术生成

1   问题出现:

      由于在sql需要将多行转为一行,便使用了聚合函数wmsys.wm_concat(),但开始在数据库执行时返回到页面

      的都是varchar类型的字符串,后来数据库迁移发现执行sql返回的是CLOB类型,而且通过 

      javax.persistence.EntityManager.createNativeQuery(Sql) 查询出的数据是Clob的代理$Proxy。问

     谷哥说是11g后返回的类型会不同,通过DBA确认两个数据库的版本分别为10.2.0.1和10.2.0.5,无法确认问

     题所在。

 

2   问题初解: 

    其他的字符串拼接聚合方法感觉太过繁琐,且有可能出现版本问题,不得已采用遍历循环,在每条结果中再插

    入查询的所需值,但总感觉有疙瘩。

 

3   问题补充: 

     中间还试过在外面包层to_char函数,to_char(wmsys.wm_concat(...)),在数据库中执行正常,但在代码中执行

     时后台报错:ORA-22922: nonexistent LOB value

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值