关于hibernate执行本地sql语句的若干问题1.数据库中有两张表表一memberLong idString nameString age...Long role_id表二roleLong idString name...现有如下需求一1.必须用hibernate执行SQL,而非HQL2.对服务层最少要提供member.id,member.name,role.name根据上面的需求,创建sql语句如下:sql:select m.id,m.name,r.id from member m,role r where r.id=m.role_id;单独执行该sql,正确!当将该sql用hibernate session提供的createSQLQuery(sql),获取到的结构并非正确的结果。而是role.name的值与member.name的值一样。针对这种问题hibernate官方文档也给出解释,可用如下方法获取sql:list = select {entity_member.*},{entity_role.*} from member m,role r where r.id=m.role_id;session.createSQLQuery(sql).addEntity("entity_member",Member.class).addEntity("entity_role",Role.class).list();这样获取的结果已经被hibernate封装成了对象集合。如果要获取member.name可以这样。for(Member m:list){ System.out.print("member.name="+m.getName());}这种方法可以解决上面提到的需求一这样虽然获取的内容比我们实际需要的内容多(我们只需要member.id,member.name,role.name,但是上面的方式获取的是member的所有属性,但是不影响我们要获取的值,俗话说,宁愿多不愿缺)如果将上面的需求一改变一下,如下需求二1.必须用hibernate执行SQL,而非HQL2.获取所有Role表在member表中没有出现的Role并且member.name中包含“美”关键字。根据上面的需求,创建sql语句如下:sql:select {entity_member.*},{entity_role.*} from role r left join (select m.* from member where m.name like '%杨%') member on r.id=member.role_id where ... ).addEntity("entity_member",Member.class).addEntity("entity_role",Role.class).list();结果1:报错:Column '...' not found结果2:运行速度极慢(大概要15秒钟~30秒钟)什么原因,相比大家也猜出来了。用如下方法可以解决带子查询的sqlsql:select m.m_id,m.m_name,r.id from role r left join (select m.id as m_id,m_name from member where m.name like '%杨%') member on r.id=member.role_id where ... ).addEntity("entity_member",Member.class).addEntity("entity_role",Role.class).list();也就是说在子查询中返回的列名给他重命名一下,避免与外层Role的列名重名。总结:我一直都不喜欢用hibernate来作DAO操作。hibernate这种适合初学者用的东西还真的不是一般人用的。建议大家也别用了。
详细解决方案
Hibernate执行本地SQL的若干有关问题的探讨
热度:139 发布时间:2016-05-05 15:21:50.0
相关解决方案
- hibernate 存入数据库当前时间
- Hibernate 投射文件中length属性无法改变integer字段的默认长度
- Exception in thread "main" org.hibernate.HibernateException: /hibernate.cfg.xml解决办法
- hibernate DAO中加了局物,未提交
- hibernate 字段lazy 的兑现原理
- Hibernate 的query.list()的有关问题
- Hibernate 关联表字段赋值有关问题
- 零配置的有关问题(struts2+Hibernate)
- hibernate 连接 oracle session 有关问题
- hibernate 中没有做一对多 , 那种关联映射的关联的话如何做连接查询
- hibernate 联接mysql出错
- 大神们开始觅错啦!org.hibernate.exception.SQLGrammarException: could not execute query
- struts2,hibernate,spring3 常用框架的API CHM版本,该怎么处理
- struts2,hibernate,spring3 惯用框架的API CHM版本
- struts hibernate 测试小例子 不报错 但数据库没反应 求分析项目在小弟我的资源里面
- struts2 hibernate 分页有关问题
- hibernate与此同时使用多数据源?spring+hibernate
- hibernate 保留对象时,根据映射文件,无法获取主键值
- hibernate 多对多添加有关问题,弄一天多了,请求大佬解答。小的 在此谢过了
- struts + hibernate 后台页面修改数据后,前台页面显示的内容新旧数据交替出现。请高手帮忙分析上原因
- hibernate 多对1关联配置有关问题
- Hibernate,级联保存为何无效?
- hibernate 一对1 ,插入不进去数据
- hibernate 连接oracle异常
- struts+spring+hibernate 开发,在action层调用service层接口,结果替null 注入失败,需高手帮忙
- Hibernate 映射有关问题
- SSH框架导入struts,hibernate,spring分先后顺序吗>>解决方法
- Hibernate 中的session怎么管理
- SSH框架(就是struts+spring+hibernate)是怎么搭建的
- 请教小弟我不使用Myeclipse,可以在tomcat里面整合Spring,Hibernate,Struts2吗