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

Hibernate查询 list.size()总是为1,查不到数据

发布网友 发布时间:2022-04-30 20:47

我来回答

3个回答

懂视网 时间:2022-05-01 01:08

<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-30 22:16

user.size:1
不是已经有数据了吗。

另外,自己打开的session,自己应该关闭。

这两行,也矛盾,如果真是null,上面的行就爆错了

System.out.println("user.size:"+list.size());
if (list != null ) {

热心网友 时间:2022-04-30 23:34

Query query=s.createQuery("from LUser as user where user.email='" + email+ "'" + " and user.pwd='" + pwd + "'");
我觉得是这句的问题。。
你查询全部试试看是不是这句的问题
试试这种
Query query=s.createQuery("from LUser as user where user.email=? and user.pwd=?");
query.setString(1,email);
query.setString(2,pwd);
我也不知道行不行啊。。。追问试过了,不是这句的问题。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...抛物线y=x2-4x+3与x轴交于A、B两点,与y轴交于点C,连AC,将直线AC向右... 抢劫罪的构成要素有哪些 抢劫罪的几个要素 抢劫罪违反了什么法律 转化型抢劫的法律认定 我想问问我的魔兽世界帐号值多少钱? 我的号能卖多少?(魔兽世界) 求评估魔兽世界账号价值,懂得来! 魔兽世界账号问题,我有一个90级的DK,想便宜出售了,直接卖了,想问问大... 魔兽世界号价值评估 2021年那里可以看第一版主 在花店买的玫瑰花,放在瓶子里养怎么养 作为礼物赠送的玫瑰花束如何保养 11°c+Ocean什么意思 怎么看cf会员还有多久 ocean circulation是什么意思 怎么永久注销 滑雪饺子皮是什么意思 oceanPacific是什么意思 怎样才能把注销掉 滑雪圈作文200-300字 Antarctic Ocean是什么意思 怎么永久注销 滑雪圈场地怎么建设 怎样才能把注销掉 和姐姐一起滑雪圈日记五百字 ocean energy是什么意思 有想建立一家小型滑雪场,最基本都需要什么?大概需要多少资金? 怎么快速注销 滑雪圈底部磨损如何处理? 第一版主搬运的是什么站 现货铜的杠杆是多少?保证金是多少? 第一版主怎么用手机看不了了 关于期权合约到期日的问题 第一版主,谁知道留下个连接? 第一版主的广告怎么屏蔽 关于近期铜期货的上涨 铜期货品种的交易特点是什么? 邯郸市区宽带办理,哪家便宜又好用? 邯郸市宝通网络科技有限公司怎么样? 在铜期货对决的结果是什么? 河北省邯郸市网络诈骗判几年怎么判刑 铜期货一天的涨跌大吗 邯郸市艾尚网络科技有限公司怎么样? 邯郸市恒诚网络科技有限公司怎么样? 铜期货的供给需求 想问下在邯郸市里安装宽带,电信和联通的哪个好一些 铜期货的需供状况 邯郸市怀远网络科技有限公司怎么样? 邯郸市世聚网络科技有限公司怎么样?