锁定老帖子 主题:一个无奈的Hibernate问题
精华帖 (3) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-20
lgdlgd 写道 这个问题我遇到过,确实都是CharacterType这个类惹的祸,初步看到,HIBERNATE从JDBC取得数据库字段类型,判断如果是CHAR(具体代码好像是12,记不得了),就使用以上的那个类CharacterType来处理,然后这个类直接取第一位,也不管数据库是CHAR(1) 还是CHAR(n),我觉得这是明显有问题的,不知道是不是有什么特殊的原因,不过我使用处理String类型的那个类替换了这个类,到现在快一年了,没发现有什么不妥。 支持lgdlgd的观点
|
|
返回顶楼 | |
发表时间:2009-09-20
lgdlgd 写道 这个问题我遇到过,确实都是CharacterType这个类惹的祸,初步看到,HIBERNATE从JDBC取得数据库字段类型,判断如果是CHAR(具体代码好像是12,记不得了),就使用以上的那个类CharacterType来处理,然后这个类直接取第一位,也不管数据库是CHAR(1) 还是CHAR(n),我觉得这是明显有问题的,不知道是不是有什么特殊的原因,不过我使用处理String类型的那个类替换了这个类,到现在快一年了,没发现有什么不妥。
感谢,需要的就是这样专业的回复。 |
|
返回顶楼 | |
发表时间:2009-09-21
呵呵,我也遇到过,可以在查询的时候给这个字段加一个trim来解决一下,得到的就是string的类型了,而且是完整的,据说是oraclejdbc的一个bug。
原:select char(10) from table ... 改:select trim(char(10)) from table.... 你试试。。。。 |
|
返回顶楼 | |
发表时间:2009-09-21
不是hibernate的问题,而是Java的char只能是一位。。
应该在hql中cast(ColA as varcher2(10)). 请问LZ,hibernate如何做到动态配置映射? |
|
返回顶楼 | |
发表时间:2009-09-21
spring jdbc 很适合你的项目。
你这个问题可不是hibernate无奈的问题,而是你的需求选错了技术方案。 |
|
返回顶楼 | |
发表时间:2009-09-21
通过函数在SQL中把你的栏位强制转换成Varchar的..
具体用什么函数自己搜吧.trim 之类的都可以.. |
|
返回顶楼 | |
发表时间:2009-09-21
caoyangx 写道 spring jdbc 很适合你的项目。
你这个问题可不是hibernate无奈的问题,而是你的需求选错了技术方案。 不是简单的选错方案的问题啊,如果是个单一的项目,大可以不用Hibernate,上面已经说了,项目的大部分都是OO方式设计的,只有一小部分需要直接的jdbc,原想Hibernate也可以直接支持的。 兄弟你没看问题的背景,而且Hibernate对Char的转化确实存在不妥,怎么能简单的只截取一位的Char呢?!。 |
|
返回顶楼 | |
发表时间:2009-09-21
zwq4166506 写道 不是hibernate的问题,而是Java的char只能是一位。。
应该在hql中cast(ColA as varcher2(10)). 请问LZ,hibernate如何做到动态配置映射? 做动态映射应该不是很难的问题,JDBC中是可以获取DB的Meta的,Hibernate中也使用了对各个Meta类型的映射类进行转换的。 |
|
返回顶楼 | |
发表时间:2009-09-21
我做了一个对HIBERNATE的SQL查询结果集自动转换成POJO的类,有兴趣的话可以到我博客看看,欢迎给意见。
|
|
返回顶楼 | |
发表时间:2009-09-21
lgdlgd 写道 我做了一个对HIBERNATE的SQL查询结果集自动转换成POJO的类,有兴趣的话可以到我博客看看,欢迎给意见。
谢谢,这个功能Hibernate不是已经有了,而且对Bean的封装也有很多开源工具支持了啊。 我的问题是,从Hiberante返回的结果中,已经出现的错误,而不是后期封装问题。 |
|
返回顶楼 | |