论坛首页 Java企业应用论坛

一个无奈的Hibernate问题

浏览 18727 次
精华帖 (3) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-20  
lgdlgd 写道
这个问题我遇到过,确实都是CharacterType这个类惹的祸,初步看到,HIBERNATE从JDBC取得数据库字段类型,判断如果是CHAR(具体代码好像是12,记不得了),就使用以上的那个类CharacterType来处理,然后这个类直接取第一位,也不管数据库是CHAR(1) 还是CHAR(n),我觉得这是明显有问题的,不知道是不是有什么特殊的原因,不过我使用处理String类型的那个类替换了这个类,到现在快一年了,没发现有什么不妥。
支持lgdlgd的观点
0 请登录后投票
   发表时间:2009-09-20  
lgdlgd 写道
这个问题我遇到过,确实都是CharacterType这个类惹的祸,初步看到,HIBERNATE从JDBC取得数据库字段类型,判断如果是CHAR(具体代码好像是12,记不得了),就使用以上的那个类CharacterType来处理,然后这个类直接取第一位,也不管数据库是CHAR(1) 还是CHAR(n),我觉得这是明显有问题的,不知道是不是有什么特殊的原因,不过我使用处理String类型的那个类替换了这个类,到现在快一年了,没发现有什么不妥。



感谢,需要的就是这样专业的回复。
0 请登录后投票
   发表时间:2009-09-21  
呵呵,我也遇到过,可以在查询的时候给这个字段加一个trim来解决一下,得到的就是string的类型了,而且是完整的,据说是oraclejdbc的一个bug。

原:select char(10) from table ...
改:select trim(char(10)) from table....

你试试。。。。
0 请登录后投票
   发表时间:2009-09-21  
不是hibernate的问题,而是Java的char只能是一位。。
应该在hql中cast(ColA as varcher2(10)).
请问LZ,hibernate如何做到动态配置映射?
0 请登录后投票
   发表时间:2009-09-21  
spring jdbc 很适合你的项目。
你这个问题可不是hibernate无奈的问题,而是你的需求选错了技术方案。
0 请登录后投票
   发表时间:2009-09-21  
通过函数在SQL中把你的栏位强制转换成Varchar的..
具体用什么函数自己搜吧.trim 之类的都可以..
0 请登录后投票
   发表时间:2009-09-21  
caoyangx 写道
spring jdbc 很适合你的项目。
你这个问题可不是hibernate无奈的问题,而是你的需求选错了技术方案。


不是简单的选错方案的问题啊,如果是个单一的项目,大可以不用Hibernate,上面已经说了,项目的大部分都是OO方式设计的,只有一小部分需要直接的jdbc,原想Hibernate也可以直接支持的。

兄弟你没看问题的背景,而且Hibernate对Char的转化确实存在不妥,怎么能简单的只截取一位的Char呢?!。
0 请登录后投票
   发表时间:2009-09-21  
zwq4166506 写道
不是hibernate的问题,而是Java的char只能是一位。。
应该在hql中cast(ColA as varcher2(10)).
请问LZ,hibernate如何做到动态配置映射?


做动态映射应该不是很难的问题,JDBC中是可以获取DB的Meta的,Hibernate中也使用了对各个Meta类型的映射类进行转换的。
0 请登录后投票
   发表时间:2009-09-21  
我做了一个对HIBERNATE的SQL查询结果集自动转换成POJO的类,有兴趣的话可以到我博客看看,欢迎给意见。
0 请登录后投票
   发表时间:2009-09-21  
lgdlgd 写道
我做了一个对HIBERNATE的SQL查询结果集自动转换成POJO的类,有兴趣的话可以到我博客看看,欢迎给意见。



谢谢,这个功能Hibernate不是已经有了,而且对Bean的封装也有很多开源工具支持了啊。

我的问题是,从Hiberante返回的结果中,已经出现的错误,而不是后期封装问题。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics