hibernate createSQLQuery返回处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate createSQLQuery返回处理相关的知识,希望对你有一定的参考价值。

service类里面
String sql ="select StaffPass from Staff where StaffName='cxsa'";
SQLQuery query=staffdao.getSession().createSQLQuery(sql);

这是登录查询数据库找密码的操作,下面,怎么处理?

参考技术A 这个返回的是一个object数组
给你贴一段我的代码吧

public List<Object[]> showList()
// TODO Auto-generated method stub
String sql="。。。。。。。。。。";
return sessionFactory.getCurrentSession().createSQLQuery(sql).list();

用for each解析这个list即可
for(Object[] o:list)
for(int i=0;i<o.length;i++)
System.out.println(o[i]);

本回答被提问者采纳
参考技术B 不解释 垃圾靠边站
public void exevalusSql(String sql,int cols)

getConn();
session.beginTransaction();
SQLQuery sq=session.createSQLQuery(sql);
List obs= (List)sq.list();
String[][] ss=new String[obs.size()][cols];
for (Object object : obs)
Object[] a=(Object[])object;
for(int j=0;j<a.length;j++)

System.out.println(a[j].toString());


session.getTransaction().commit();
HibernateSessionFactory.getSessionFactory().close();

createSQLQuery is not valid without active transaction解决方法

错误出现场景:

hibernate+struts2整合时,hibernate+struts2+spring(SSH)框架整合时出现

解决方案:
在我们使用hibernate框架与其他框架进行整合时,会遇到“不能在没有活动的事务中执行(org.hibernate.HibernateException: createSQLQuery is not valid without active transaction)”,我曾反复查看过自己写的代码,甚至把项目删除重新写一遍,仍然发现此问题的存在,我开始怀疑是hibernate核心配置文件的问题,立即将本地线程绑定session给注释了(hibernate.current_session_context_class),结果再启动项目,发现问题解决了

问题分析:
hibernate.current_session_context_class的值设成thread。我的理解就是将getCurrentSession()返回的session绑定到当前运行线程中。比较专业的说法是此session的上下文是thread,但不是spring已经托管的那个Session对象。所以获取的session是在spring代理的上下文之外的的当前线程之中,所以此session并非事务管理器代理的那个session,不会自动开启事务。根据官方提示:第三方框架提供了基于代理或者基于拦截器的上下文相关的会话的管理。


个人小站:http://www.xinxbk.cn
个人扣扣:4710287
欢迎与您一起交流Java开发!






以上是关于hibernate createSQLQuery返回处理的主要内容,如果未能解决你的问题,请参考以下文章

hibernate 中createQuery与createSQLQuery的用法

hibernate session.createSQLQuery(sql); 通过命令删除

Hibernate使用createSqlQuery进行模糊查询时找不到数据

在hibernate createSQlquery结果中使用sql列名

不推荐使用 Hibernate 5.2.5.Final createSQLQuery() 方法

createQuery与createSQLQuery区别