问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java开发中,为什么我的sql语句在hibernate原生sql查询时查不到结果

发布网友 发布时间:2022-04-08 19:49

我来回答

2个回答

懂视网 时间:2022-04-09 00:11

<Map<Object, Object>> listTest = this.getService().getListBySql(sqlTest); for (Map<Object, Object> m : listTest) { for (Object k : m.keySet()) { System.out.println(k + " : " + m.get(k)); } }

执行代码输出结果为:

技术分享

但其sql语句在数据库中执行结果为:

技术分享技术分享

其中this.getService().getListBySql()方法是封装了hibernate原生sql查询

List list = (List) this.getHibernateTemplate().execute(
  new HibernateCallback() {
   public Object doInHibernate(final Session session)
    throws HibernateException, SQLException {
   Query query = session.createSQLQuery(sql)
    .setResultTransformer(
     Transformers.ALIAS_TO_ENTITY_MAP);
   return query.list();
   }
  });

问题大概就可以描述为博文的标题那样,然后就问了下度娘却没有得到解决办法。最后的解决方法是使用hql查询,建立其对应实体类再调用getHibernateTemplate().find()方法,

进而问题得到了解决。但是好像并没有了解其产生这样问题的具体原因,后来在闲时无聊追因的过程中看到了这篇文章http://my.oschina.net/lovedreamland/blog/26355?fromerr=gjrRGyZM。

瞬时豁然开朗,原来是oracle数据类型和java数据类型对应关系的原因。summaryno在oracle为char类型!

使用hibernate原生sql查询,结果集全为1的原因:

Hibernate在查询Oracle的时候,将char自动映射成character(varchar的子集)类型

使用hibernate原生sql查询,结果集全为1的问题解决:

1:将你要查询的实体转换成实体Bean,使用HQL查询,这样就不存在字段映射的问题了,但是这样比较麻烦;

2:可以使用Hibernate中的addScalar(String arg,Type type)来自定义返回字段的类型,如:

this.getSession()
  .createSQLQuery("select id,name,state from tb")
  .addScalar("id", Hibernate.STRING)
  .addScalar("name", Hibernate.STRING)
  .addScalar("state", Hibernate.STRING)
  .list();

这样就可以解决,但是这样的话,必须把所有要查询的字段进行定义,在字段比较多的时候,就相对比较麻烦;

3:在Oracle查询语句中直接指定数据格式,如:

select id,name,cast(state as varchar(2)) from tb

  这种解决方法比较方便,只需要在查询语句指定char的返回类型,推荐使用这种方法进行查询。

 

使用hibernate原生sql查询,结果集全为1的问题解决

标签:

热心网友 时间:2022-04-08 21:19

是mysql的问题,将mysql的安装目录下的my.ini中的两个地方改为utf8解决。
如果忘记mysql的安装路径,可以win+r(开始-运行) 然后 services.msc
找到mysql服务,右键查看属性即可。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
悲观的意思是什么悲观是什么意思 ...坐立不安的。还总想挠挠手呀、胳膊什么的。这是怎么回事啊?是一种... ...胳膊肘麻,有时会麻到感觉大拇指根部疼,食指也有点... ...入睡感觉左胳膊从手腕到肩膀酥溜溜的酸,睁开眼又好了,什么原因... 胳膊上麻溜溜的 像是有小疙瘩 还很痒 有点硬 少量蔗糖,食盐,食油,食醋分别倒入一定量水中,并用筷子不断搅拌,观察... 将食盐 蔗糖 泥土 植物油与水混合 英文会计的provision对应中文会计的哪个词啊? 双人旁一个直一个心念什么,什么意思 白瓷有隙是成语吗 关于声音~ 百度地图可以下载到手机上吗? 帮忙查一下有关声音的资料! 用百度地图怎么给手机定位 关于声学的资料 百度地图怎么找到妈妈的手机在哪里? 声音的资料谁知道? 空调挂机型号中23g和25g啥意思 声音的资料,急需!!! 手机百度地图搜索问题 有关声音的资料,急呀!!! 有关声音的资料有哪些? 百度地图可以定位异地手机吗 请问百度地图在没有网络连接情况下可以定位手机位置吗? 百度地图可以手机定位置吗? 海信35gw/810fzbp空调g,w,f,b,p字母各代表什么意思? 空调35gw是什么意思 g G是空调暖风吗? 寻根 问祖 怎么寻找祖籍地? 怎么看自己的户籍所在地 OPPOr9s怎么把信息加入黑名单? 老滚5灵魂精华宝石怎么得 谁能给我想几个好听点大米名字? 谢谢大神帮助 上古卷轴5灵魂精华宝石怎么上去 为大米起名? 上古卷轴5灵魂石以及各宝石作用还有怎么获取 有新意的大米名字 上古卷轴5灵魂宝石怎么弄 大米叫名字好呢? 上古卷轴5中24个稀有的灵魂石代码或者能告诉我这24个在哪里可以找到 上古卷轴5灵魂精华宝石的传送点在哪里 给大米起名,既要显得贵重,又要上档次,超凡脱俗一点的,最好是三个字以内的名字。 《上古卷轴5》特大灵魂石代码是什么? 上古卷轴 特大灵魂石代码 有创意的大米名字有哪些 上古卷轴5附魔用那个灵魂宝石好 还有求灵魂宝石代码 请大家帮忙取个大米的名字,要好记,好听,有内函 上古卷轴5要用到完美的宝石和钻石的地方在哪 大米应该起个什么名字? 大米的名字