- 浏览: 1012949 次
- 性别:
- 来自: 福州
最新评论
-
guanxin2012:
大神,您好。非常感谢您贡献了IKExpression。我们现在 ...
分享开源表达式解析器IK-Expression2.0 -
qqgigas:
LZ,public boolean createUser(LD ...
Sun Directory Server/LDAP学习笔记(二)——API说明及代码样例 -
gao_shengxian:
Hibernate: update T_GX_TEST set ...
优雅Java编程 之 使用Hibernate存储Oracle Spatial对象 -
a78113534:
感谢大神,在安卓里面调用成功了。
发布IK Expression开源表达式解析器 V2.1.0 -
majiedota:
加油
来自开源支持者的第一笔捐赠
背景:
1.数据库使用Oracle,表字段 ColA 被定义为 char(10)(字段类型不能修改,这个是接口方定的)
2.hibernate使用NativeSQL查询(由于项目种种原因,不能使用标准Hibernate的OO方式)。
问题:
从list中返回了List<Object[]>对象,but每行的Object[]中, ColA被Hibernate转成了Character对象,只有一位,后面的char都被截断了.
查了hibernate的文档,知道可以设定每个字段的转化类型,but我们的sql是动态配置的,并不能确定某个字段一定是那种类型,因此此方法不能用了。
暂时的方案:
退回jdbc时代,直接读取DB的META,然后在读数据。
这里的疑问是,为啥Hibernate对Char字段的映射只能是1位嘛,觉得这个转换有问题!!
大家说说,又或者是本人太菜,学艺不精
-"不过我使用处理String类型的那个类替换了这个类",没太明白这句话的意思? 是改了Hibernate的源码?还是?能说具体点做法么?
-Hibernate也是封装了JDBC,RS到POJO的映射应该很好做;
-因为LZ是无法确定哪个字段是否是CHAR(N)类型的,所以我想Trim()方法应该不适用;不可能每个返回列都Trim()吧?
漏了一点,除了名字和和路径,代码也有改,这个比较简单,不细说了
-"不过我使用处理String类型的那个类替换了这个类",没太明白这句话的意思? 是改了Hibernate的源码?还是?能说具体点做法么?
-Hibernate也是封装了JDBC,RS到POJO的映射应该很好做;
-因为LZ是无法确定哪个字段是否是CHAR(N)类型的,所以我想Trim()方法应该不适用;不可能每个返回列都Trim()吧?
相当于改了源码,做法是把处理String的那个类COPY出来,名字和包改成ChacratorType一样,然后并不放回到Hibernate的JAR包,只放在自已的工程中,
其实不只是类似BUG需要这样处理,还有一些不满足需求的框架也需要这样复盖一下,所以我的应用中会有别的开源项目的包,这样正好哪天把Hibernate版本升级了,而且它没把这BUG处理掉的时候,我的代码也不受影响。
-因为LZ是无法确定哪个字段是否是CHAR(N)类型的,所以我想Trim()方法应该不适用;不可能每个返回列都Trim()吧?
这个分析得应该很对。
-"不过我使用处理String类型的那个类替换了这个类",没太明白这句话的意思? 是改了Hibernate的源码?还是?能说具体点做法么?
-Hibernate也是封装了JDBC,RS到POJO的映射应该很好做;
-因为LZ是无法确定哪个字段是否是CHAR(N)类型的,所以我想Trim()方法应该不适用;不可能每个返回列都Trim()吧?
这个问题刚刚遇到,呵呵,支持lgdlgd 的解决方法
说一句对JE上各位看官的感觉。请详细看明白提问者要描述的问题,同样一个问题,不同的人看到的东西大相径庭。
就这个问题来说,你可以认为楼主我Hibernate用的不好,评个新手;同样,也可以认真思考,像楼上的这位一样有所收获..总的来说,希望大家都有收获吧
这个问题刚刚遇到,呵呵,支持lgdlgd 的解决方法
这个方法我认为是可行的,使用oracle的内置函数to_char, LZ可以试试
正解!
楼主的问题我也遇到过,不过我没楼主那么复杂我就用了这个addScalar方法。
这位兄弟说的用trim或者是to_char我好像也试过,貌似是不行,但是我具体也不记得了,我也是实在逼不得已的情况才对每个属性都addScalar的,不然肯定在sql上做手脚了
这个方法我认为是可行的,使用oracle的内置函数to_char, LZ可以试试
正解!
没有白忙活的说法,至少你是彻底理解掌握了Bean的属性映射处理能力了。
造车轮的最大好处就是,制造者对车轮的了解远胜于使用者,呵呵。
这个方法我认为是可行的,使用oracle的内置函数to_char, LZ可以试试
是啊,已经封装了,以下是来自Hiberante参考文档的原文:
16.1.2. 实体查询(Entity queries)
上面的查询都是返回标量值的,也就是从resultset中返回的“裸”数据。下面展示如何通
过addEntity()让原生查询返回实体对象。
sess.createSQLQuery("SELECT * FROM CATS").addEntity(Cat.class);
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);
This query specified:
•SQL查询字符串
•要返回的实体
假设Cat被映射为拥有ID,NAME和BIRTHDATE三个字段的类,以上的两个查询都返回一个List,每个
元素都是一个Cat实体。
谢谢,这个功能Hibernate不是已经有了,而且对Bean的封装也有很多开源工具支持了啊。
我的问题是,从Hiberante返回的结果中,已经出现的错误,而不是后期封装问题。
做动态映射应该不是很难的问题,JDBC中是可以获取DB的Meta的,Hibernate中也使用了对各个Meta类型的映射类进行转换的。
不是简单的选错方案的问题啊,如果是个单一的项目,大可以不用Hibernate,上面已经说了,项目的大部分都是OO方式设计的,只有一小部分需要直接的jdbc,原想Hibernate也可以直接支持的。
兄弟你没看问题的背景,而且Hibernate对Char的转化确实存在不妥,怎么能简单的只截取一位的Char呢?!。
1.数据库使用Oracle,表字段 ColA 被定义为 char(10)(字段类型不能修改,这个是接口方定的)
2.hibernate使用NativeSQL查询(由于项目种种原因,不能使用标准Hibernate的OO方式)。
问题:
从list中返回了List<Object[]>对象,but每行的Object[]中, ColA被Hibernate转成了Character对象,只有一位,后面的char都被截断了.
查了hibernate的文档,知道可以设定每个字段的转化类型,but我们的sql是动态配置的,并不能确定某个字段一定是那种类型,因此此方法不能用了。
暂时的方案:
退回jdbc时代,直接读取DB的META,然后在读数据。
这里的疑问是,为啥Hibernate对Char字段的映射只能是1位嘛,觉得这个转换有问题!!
大家说说,又或者是本人太菜,学艺不精
评论
43 楼
lgdlgd
2009-09-25
C_J 写道
-"不过我使用处理String类型的那个类替换了这个类",没太明白这句话的意思? 是改了Hibernate的源码?还是?能说具体点做法么?
-Hibernate也是封装了JDBC,RS到POJO的映射应该很好做;
-因为LZ是无法确定哪个字段是否是CHAR(N)类型的,所以我想Trim()方法应该不适用;不可能每个返回列都Trim()吧?
漏了一点,除了名字和和路径,代码也有改,这个比较简单,不细说了
42 楼
lgdlgd
2009-09-25
C_J 写道
-"不过我使用处理String类型的那个类替换了这个类",没太明白这句话的意思? 是改了Hibernate的源码?还是?能说具体点做法么?
-Hibernate也是封装了JDBC,RS到POJO的映射应该很好做;
-因为LZ是无法确定哪个字段是否是CHAR(N)类型的,所以我想Trim()方法应该不适用;不可能每个返回列都Trim()吧?
相当于改了源码,做法是把处理String的那个类COPY出来,名字和包改成ChacratorType一样,然后并不放回到Hibernate的JAR包,只放在自已的工程中,
其实不只是类似BUG需要这样处理,还有一些不满足需求的框架也需要这样复盖一下,所以我的应用中会有别的开源项目的包,这样正好哪天把Hibernate版本升级了,而且它没把这BUG处理掉的时候,我的代码也不受影响。
-因为LZ是无法确定哪个字段是否是CHAR(N)类型的,所以我想Trim()方法应该不适用;不可能每个返回列都Trim()吧?
这个分析得应该很对。
41 楼
C_J
2009-09-25
-"不过我使用处理String类型的那个类替换了这个类",没太明白这句话的意思? 是改了Hibernate的源码?还是?能说具体点做法么?
-Hibernate也是封装了JDBC,RS到POJO的映射应该很好做;
-因为LZ是无法确定哪个字段是否是CHAR(N)类型的,所以我想Trim()方法应该不适用;不可能每个返回列都Trim()吧?
40 楼
linliangyi2007
2009-09-24
greenhunter 写道
lgdlgd 写道
这个问题我遇到过,确实都是CharacterType这个类惹的祸,初步看到,HIBERNATE从JDBC取得数据库字段类型,判断如果是CHAR(具体代码好像是12,记不得了),就使用以上的那个类CharacterType来处理,然后这个类直接取第一位,也不管数据库是CHAR(1) 还是CHAR(n),我觉得这是明显有问题的,不知道是不是有什么特殊的原因,不过我使用处理String类型的那个类替换了这个类,到现在快一年了,没发现有什么不妥。
这个问题刚刚遇到,呵呵,支持lgdlgd 的解决方法
说一句对JE上各位看官的感觉。请详细看明白提问者要描述的问题,同样一个问题,不同的人看到的东西大相径庭。
就这个问题来说,你可以认为楼主我Hibernate用的不好,评个新手;同样,也可以认真思考,像楼上的这位一样有所收获..总的来说,希望大家都有收获吧
39 楼
greenhunter
2009-09-24
lgdlgd 写道
这个问题我遇到过,确实都是CharacterType这个类惹的祸,初步看到,HIBERNATE从JDBC取得数据库字段类型,判断如果是CHAR(具体代码好像是12,记不得了),就使用以上的那个类CharacterType来处理,然后这个类直接取第一位,也不管数据库是CHAR(1) 还是CHAR(n),我觉得这是明显有问题的,不知道是不是有什么特殊的原因,不过我使用处理String类型的那个类替换了这个类,到现在快一年了,没发现有什么不妥。
这个问题刚刚遇到,呵呵,支持lgdlgd 的解决方法
38 楼
冰之沸点
2009-09-23
linliangyi2007 写道
timothy_bitty 写道
dmewy 写道
通过函数在SQL中把你的栏位强制转换成Varchar的..
具体用什么函数自己搜吧.trim 之类的都可以..
具体用什么函数自己搜吧.trim 之类的都可以..
这个方法我认为是可行的,使用oracle的内置函数to_char, LZ可以试试
正解!
楼主的问题我也遇到过,不过我没楼主那么复杂我就用了这个addScalar方法。
这位兄弟说的用trim或者是to_char我好像也试过,貌似是不行,但是我具体也不记得了,我也是实在逼不得已的情况才对每个属性都addScalar的,不然肯定在sql上做手脚了
37 楼
langhua9527
2009-09-23
是做分词的那个大哥吧。。。
听我说:“不要迷恋Hibernate,Hibernate只是一传说。。。”
听我说:“不要迷恋Hibernate,Hibernate只是一传说。。。”
36 楼
lgdlgd
2009-09-21
我也发现没有白忙活,其实我的实现和你说的还是有些不一样的地方,应用场景不一样
你说的方法只能用于实体有映射的情况,之前没看出来,是因为正好我的实有映射
我的实现不需要任何映射。
你说的方法只能用于实体有映射的情况,之前没看出来,是因为正好我的实有映射
我的实现不需要任何映射。
35 楼
linliangyi2007
2009-09-21
timothy_bitty 写道
dmewy 写道
通过函数在SQL中把你的栏位强制转换成Varchar的..
具体用什么函数自己搜吧.trim 之类的都可以..
具体用什么函数自己搜吧.trim 之类的都可以..
这个方法我认为是可行的,使用oracle的内置函数to_char, LZ可以试试
正解!
34 楼
linliangyi2007
2009-09-21
lgdlgd 写道
靠,果然可以,字段中间也可以加下杠,居然也能对应上,看来HIBERNATE也做同样的处理,呵呵,白忙呼了
没有白忙活的说法,至少你是彻底理解掌握了Bean的属性映射处理能力了。
造车轮的最大好处就是,制造者对车轮的了解远胜于使用者,呵呵。
33 楼
timothy_bitty
2009-09-21
dmewy 写道
通过函数在SQL中把你的栏位强制转换成Varchar的..
具体用什么函数自己搜吧.trim 之类的都可以..
具体用什么函数自己搜吧.trim 之类的都可以..
这个方法我认为是可行的,使用oracle的内置函数to_char, LZ可以试试
32 楼
lgdlgd
2009-09-21
靠,果然可以,字段中间也可以加下杠,居然也能对应上,看来HIBERNATE也做同样的处理,呵呵,白忙呼了
31 楼
linliangyi2007
2009-09-21
lgdlgd 写道
我的意思是按照我之前说的改了CharacterType类后对其返回结果进行封装,
你是说HIBERNATE已经有对没有映射的表使用SQL查询也能封装?我白忙呼了?
你是说HIBERNATE已经有对没有映射的表使用SQL查询也能封装?我白忙呼了?
是啊,已经封装了,以下是来自Hiberante参考文档的原文:
引用
16.1.2. 实体查询(Entity queries)
上面的查询都是返回标量值的,也就是从resultset中返回的“裸”数据。下面展示如何通
过addEntity()让原生查询返回实体对象。
sess.createSQLQuery("SELECT * FROM CATS").addEntity(Cat.class);
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);
This query specified:
•SQL查询字符串
•要返回的实体
假设Cat被映射为拥有ID,NAME和BIRTHDATE三个字段的类,以上的两个查询都返回一个List,每个
元素都是一个Cat实体。
30 楼
lgdlgd
2009-09-21
我的意思是按照我之前说的改了CharacterType类后对其返回结果进行封装,
你是说HIBERNATE已经有对没有映射的表使用SQL查询也能封装?我白忙呼了?
你是说HIBERNATE已经有对没有映射的表使用SQL查询也能封装?我白忙呼了?
29 楼
linliangyi2007
2009-09-21
lgdlgd 写道
我做了一个对HIBERNATE的SQL查询结果集自动转换成POJO的类,有兴趣的话可以到我博客看看,欢迎给意见。
谢谢,这个功能Hibernate不是已经有了,而且对Bean的封装也有很多开源工具支持了啊。
我的问题是,从Hiberante返回的结果中,已经出现的错误,而不是后期封装问题。
28 楼
lgdlgd
2009-09-21
我做了一个对HIBERNATE的SQL查询结果集自动转换成POJO的类,有兴趣的话可以到我博客看看,欢迎给意见。
27 楼
linliangyi2007
2009-09-21
zwq4166506 写道
不是hibernate的问题,而是Java的char只能是一位。。
应该在hql中cast(ColA as varcher2(10)).
请问LZ,hibernate如何做到动态配置映射?
应该在hql中cast(ColA as varcher2(10)).
请问LZ,hibernate如何做到动态配置映射?
做动态映射应该不是很难的问题,JDBC中是可以获取DB的Meta的,Hibernate中也使用了对各个Meta类型的映射类进行转换的。
26 楼
linliangyi2007
2009-09-21
caoyangx 写道
spring jdbc 很适合你的项目。
你这个问题可不是hibernate无奈的问题,而是你的需求选错了技术方案。
你这个问题可不是hibernate无奈的问题,而是你的需求选错了技术方案。
不是简单的选错方案的问题啊,如果是个单一的项目,大可以不用Hibernate,上面已经说了,项目的大部分都是OO方式设计的,只有一小部分需要直接的jdbc,原想Hibernate也可以直接支持的。
兄弟你没看问题的背景,而且Hibernate对Char的转化确实存在不妥,怎么能简单的只截取一位的Char呢?!。
25 楼
dmewy
2009-09-21
通过函数在SQL中把你的栏位强制转换成Varchar的..
具体用什么函数自己搜吧.trim 之类的都可以..
具体用什么函数自己搜吧.trim 之类的都可以..
24 楼
caoyangx
2009-09-21
spring jdbc 很适合你的项目。
你这个问题可不是hibernate无奈的问题,而是你的需求选错了技术方案。
你这个问题可不是hibernate无奈的问题,而是你的需求选错了技术方案。
发表评论
-
来自开源支持者的第一笔捐赠
2013-01-09 21:15 57812013年1月9号,一个平凡而又不平常的日子! IK中文分词 ... -
发布 IK Analyzer 2012 FF 版本
2012-10-23 17:50 25081首先感谢大家对IK分词器的关注。 最近一段时间正式公司事务最 ... -
发布 IK Analyzer 2012 版本
2012-03-08 11:23 36176新版本改进: 支持分词歧义处理 支持数量词合并 词典支持中英 ... -
CSDN发生严重用户账号泄密事件
2011-12-21 19:21 2566之前有在CSDN注册过的兄弟们,注意了。。。 如果你的邮箱, ... -
一个隐形的java int溢出
2011-08-30 09:44 7560故事的背景: 笔者最近在做一个类SNS的项目,其中 ... -
雷军 :互联网创业的葵花宝典
2011-05-04 10:35 3596博主评: 这片博客很短 ... -
Luci-mint站内搜索实测
2011-04-02 16:18 4141关于Luci-mint 服务器硬 ... -
发布 IK Analyzer 3.2.8 for Lucene3.X
2011-03-04 17:49 14254IK Analyzer 3.2.8版本修订 ... -
TIPS - XML CDATA中的非法字符处理
2011-02-17 15:03 3305XML解析过程中,常遇见CDATA中存在非法字符,尤其在火星文 ... -
对Cassandra的初体验
2010-10-13 17:58 9137作为“云计算”时代的架构设计人员而言,不懂K-V库会被 ... -
Spring + iBatis 的多库横向切分简易解决思路
2010-10-11 13:43 93551.引言 笔者最近在做一个互联网的“类SNS”应用,应用 ... -
发布 IK Analyzer 3.2.5 稳定版 for Lucene3.0
2010-09-08 14:43 5823新版本IKAnnlyzer3.2.8已发布! 地址: http ... -
关于Lucene3.0.1 QueryParser的一个错误
2010-05-21 21:33 2128表达式1: 引用 id:"1231231" ... -
发布 IK Analyzer 3.2.3 稳定版 for Lucene3.0
2010-05-15 14:13 6717IK Analyzer 3.2.3版本修订 在3.2.0版 ... -
windows平台上的nginx使用
2010-01-28 17:13 3406转载自:http://nginx.org/en/docs/wi ... -
发布IKAnnlyzer3.2.0稳定版 for Lucene3.0
2009-12-07 09:27 9579最新3.2.5版本已经推出,http://linliangyi ... -
在Tomcat下以JNDI方式发布JbossCache
2009-12-04 10:57 3829前言: 看过JbossCache的开发手册,发现在Jb ... -
Spring AOP小例子
2009-11-16 10:35 3404PS: 要注明一下,这个是转载滴,之前漏了说鸟,汗死 这里给 ... -
ActiveMQ 5.X 与 Tomcat 集成一(JNDI部署)
2009-11-10 15:15 5649原文地址:http://activemq.apache.org ... -
发布IKAnalyzer中文分词器V3.1.6GA
2009-11-08 23:10 11856IKAnalyzer3.2.0稳定版已经发布,支持Lucene ...
相关推荐
**标题解析:**“hibernate的第一个例子”表明这是一个关于Hibernate框架的基础教程,主要目标是展示如何使用Hibernate进行数据持久化操作。 **描述分析:**描述提到这是一个超级简单的例子,包含一个持久化对象...
《Hibernate入门:初识与实践》 ...总之,"hibernate第一个hibernate"项目是一个绝佳的起点,它将引导你了解并掌握Hibernate的基本概念和操作。通过实践,你可以逐步熟悉ORM思想,为后续的Java开发奠定坚实的基础。
"第一个手写Hibernate"项目旨在帮助开发者深入理解Hibernate的工作原理,通过手动编写相关代码,以实践的方式来学习和掌握Hibernate的核心概念。 **一、Hibernate简介** Hibernate是一个开源的ORM框架,它允许...
”表达了这个教程的目标是避免新手在学习过程中遇到常见问题,确保他们能够顺利地完成第一个Hibernate应用的搭建和运行。 **知识点详解** 1. **Hibernate简介**:Hibernate是一个开源的ORM框架,它将Java对象与...
本文将深入探讨如何使用SpringMvc和Hibernate这两个强大的框架,构建一个功能完善的问题管理系统。首先,我们来看看SpringMvc和Hibernate的核心概念及其在项目中的作用。 SpringMvc是Spring框架的一个模块,专门...
【hibernate第一个例子】 在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本示例将引导初学者了解如何使用Hibernate进行简单的数据库连接和操作。 首先,我们需要...
Hibernate是一个用于简化Java数据库编程的开源框架,它提供了一种在Java应用程序中持久化对象的方式,避免了直接编写SQL语句,提高了开发效率。 **1. Hibernate基本概念** - **对象关系映射(ORM)**: ORM是将...
**hibernate完整的一个项目** 本项目旨在提供一个完整的Hibernate框架的实现,涵盖了从环境搭建到实际应用的全过程。Hibernate是Java开发中的一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的...
Hibernate 是一个基于 Java 的持久层框架,提供了一个抽象的数据访问层,能够与多种数据库进行集成。在 Hibernate 的配置文件中,我们可以配置不同的数据库连接,包括驱动程序、URL 等信息。 配置 Hibernate 连接...
在Java开发领域,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。当涉及到Hibernate项目时,为了使其正常运行,通常需要一系列的JAR(Java ...
Hibernate是一个开源的对象关系映射(ORM)框架,它封装了JDBC(Java Database Connectivity)的复杂性,并允许Java开发者以面向对象的方式操作数据库。Hibernate框架被广泛应用于企业级Java应用程序中,可以与...
Hibernate 是一个开源的O/R mappimg的框架,基于JDBC提供了一种持久性数据管理的方案,相对于EntityBean来说是相当轻量级的。由于Hibernate是基于 JDBC的,所以它的数据库查寻的能力相对于CMP来说也是异常强大的,...
# Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的...
Hibernate 是一个基于Java的ORM(Object-Relational Mapping,对象关系映射)框架,它提供了一种简洁高效的方式来访问和操作关系数据库。下面是 Hibernate 的主要知识点: Hibernate 简介 Hibernate 是一个开源的...
因此,"解决Hibernate与jdk新版本不兼容的jar问题"可能是提供了一个升级后的Hibernate库,或者是包含了特定的补丁或者配置,使得Hibernate能够在新JDK环境下正常工作。 在"lib"目录下,可能包含了所有必要的...
Hibernate,一个强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。在处理数据更新时,Hibernate提供了多种方法,但同时也可能会遇到一些常见问题。本篇文章将深入探讨Hibernate更新机制及其可能遇到的...
"第一个Hibernate代码, Hello Hibernate" 这个标题表明我们将要探讨的是一个初学者级别的Hibernate教程,可能是通过一个简单的项目或示例来介绍如何使用Hibernate框架。Hibernate是一个开源的对象关系映射(ORM)...
标题提到的是“一个好的hibernate源代码有server2008数据库”。这里我们可以理解为,这是一个关于Hibernate框架的示例项目,它使用了Microsoft SQL Server 2008作为后端数据库。Hibernate是Java开发中常用的一个对象...
Hibernate是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用与关系型数据库之间的交互。通过Hibernate,开发者可以使用面向对象的方式处理数据库操作,而无需关心底层SQL语句的编写。 在留言板系统中,...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者使用面向对象的方式来操作数据库。这个框架将数据库操作转化为对Java对象的操作,简化了数据持久化的复杂度。以下是对Hibernate的一些关键知识点的...