疯了!!!!hibernate和pl-sql同样的sql语句查到的东西不一样!!!

名字到底多长 2012-12-21 07:01:56



struts和hibernate用到的代码:

//struts
String HQL =
"SELECT s.corp_Name,s.corp_Id,sc2.corp_Name FROM Sys_Corporation s LEFT JOIN Sys_Corporation sc2 " +
"ON s.super_Corp=sc2.corp_Id";

List list = dao.findBySql(HQL);
//hibernate
public List<?> findBySql(String sql) {
List<?> list = null;
try{
session = this.getSession();
list = session.createSQLQuery(sql).list();
}catch(Exception e){
log.error("CommonDAO.findBySql Exception");
}finally{
this.sessionTransactionGc();
}
return list;
}


谁能告诉我怎么回事么????????????
...全文
376 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
forgetsam 2012-12-24
  • 打赏
  • 举报
回复
引用 22 楼 mingzidaodiduochang 的回复:
....hibernate只是对java jdbc做了些封装并且加了些功能吧?难道他还自己写一套和数据库通信的方法?自己建一个SQLCA然后自己生成游标和主变量什么的解释这种嵌入式sql???
它只是写了一套机制把HQL和hibernate动作解析成SQL,所以,你写的HQL真正执行的是什么,以它生成的为准,你可以设置showsql属性把它打印出来,如果它打印出来的SQL和你在PL/SQL里执行的一样,那结果就不会有差别
名字到底多长 2012-12-24
  • 打赏
  • 举报
回复
引用 21 楼 forgetsam 的回复:
引用 20 楼 mingzidaodiduochang 的回复:体系是什么意思?数据库是老大写的我不能改啊。。而且和视图有什么联系。。。 同样的表同样的sql语句。只是一个是工具里直接写的一个是嵌入在java程序里面的,都是纯sq…… list = session.createSQLQuery(sql).list(); 只要你这么写,它就不是纯SQL。 R……
....hibernate只是对java jdbc做了些封装并且加了些功能吧?难道他还自己写一套和数据库通信的方法?自己建一个SQLCA然后自己生成游标和主变量什么的解释这种嵌入式sql???
forgetsam 2012-12-24
  • 打赏
  • 举报
回复
引用 20 楼 mingzidaodiduochang 的回复:
体系是什么意思?数据库是老大写的我不能改啊。。而且和视图有什么联系。。。 同样的表同样的sql语句。只是一个是工具里直接写的一个是嵌入在java程序里面的,都是纯sq……
list = session.createSQLQuery(sql).list(); 只要你这么写,它就不是纯SQL。 ResultSet = st.executeQuery(sql); 这个才叫纯SQL,懂?
名字到底多长 2012-12-24
  • 打赏
  • 举报
回复
引用 23 楼 forgetsam 的回复:
引用 22 楼 mingzidaodiduochang 的回复:....hibernate只是对java jdbc做了些封装并且加了些功能吧?难道他还自己写一套和数据库通信的方法?自己建一个SQLCA然后自己生成游标和主变量什么的解释这种嵌入式sql??? 它只是写了一套机制把HQL和hibernate动作解析成SQL,所以,你写的HQL真正执行的是什么,以它生成的为准,……
。。。又绕回来了。。。 我写的是sql,不是hql。。 我的问题就是一模一样的sql,程序里面的和pl-sql developer里面的结果不一样。
forgetsam 2012-12-23
  • 打赏
  • 举报
回复
他们就不是一个体系,当然有差别。 如果你觉得SQL准确,那你就自己写个视图,用Hibernate映射这个视图,hql直接写"from 视图实体"完事
  • 打赏
  • 举报
回复
引用 17 楼 mingzidaodiduochang 的回复:
引用 16 楼 yang_lover 的回复:引用 15 楼 mingzidaodiduochang 的回复:引用 13 楼 yang_lover 的回复:Plain Text code?12SELECT s.corp_Name,s.corp_Id,sc2.corp_Name FROM Sys_Corporation s , Sys_Corporation sc2 wh……
你又没这么说。。。。
名字到底多长 2012-12-23
  • 打赏
  • 举报
回复
引用 19 楼 forgetsam 的回复:
他们就不是一个体系,当然有差别。 如果你觉得SQL准确,那你就自己写个视图,用Hibernate映射这个视图,hql直接写"from 视图实体"完事
体系是什么意思?数据库是老大写的我不能改啊。。而且和视图有什么联系。。。 同样的表同样的sql语句。只是一个是工具里直接写的一个是嵌入在java程序里面的,都是纯sql语句和hibernate应该也没什么关系了。结果会不一样?
名字到底多长 2012-12-22
  • 打赏
  • 举报
回复
引用 16 楼 yang_lover 的回复:
引用 15 楼 mingzidaodiduochang 的回复:引用 13 楼 yang_lover 的回复:Plain Text code?12SELECT s.corp_Name,s.corp_Id,sc2.corp_Name FROM Sys_Corporation s , Sys_Corporation sc2 where s.super_Corp=sc2.co……
没注意你的sql语句,还以为是抄我的。。。 大哥你是来玩我的吧,这2句话意思不一样好不。能直接连接我还用个毛左连接啊。左连接条件不成立也有数据,也就是不是每个公司都有父公司的。。。你这样就只能查到主键为2的那条记录了。
  • 打赏
  • 举报
回复
引用 15 楼 mingzidaodiduochang 的回复:
引用 13 楼 yang_lover 的回复:Plain Text code?12SELECT s.corp_Name,s.corp_Id,sc2.corp_Name FROM Sys_Corporation s , Sys_Corporation sc2 where s.super_Corp=sc2.corp_Id 一个简单的条件查询而已。没必要用连接查询。 ……
上面给你回的sql不就是吗? 看不懂啊?那我再写一次吧,哎。。。。如下:

select fugongsi.corp_name, ziji.corp_name from Sys_Corporation ziji ,Sys_Corporation fugongsi where ziji.super_corp = fugongsi.corp_id ;
名字到底多长 2012-12-22
  • 打赏
  • 举报
回复
引用 13 楼 yang_lover 的回复:
Plain Text code?12SELECT s.corp_Name,s.corp_Id,sc2.corp_Name FROM Sys_Corporation s , Sys_Corporation sc2 where s.super_Corp=sc2.corp_Id

一个简单的条件查询而已。没必要用连接查询。


找到父公司名字的同时找到自己名字,请问下怎么查。
名字到底多长 2012-12-22
  • 打赏
  • 举报
回复
引用 12 楼 lwgreatperson 的回复:
你在配置文件中怎么配置的
纯sql语句和配置文件没什么联系吧。这个sql都绕过hibernate映射文件了。
  • 打赏
  • 举报
回复

SELECT s.corp_Name,s.corp_Id,sc2.corp_Name FROM Sys_Corporation s , Sys_Corporation sc2  
where s.super_Corp=sc2.corp_Id
一个简单的条件查询而已。没必要用连接查询。
-_-快乐 2012-12-22
  • 打赏
  • 举报
回复
你在配置文件中怎么配置的
名字到底多长 2012-12-22
  • 打赏
  • 举报
回复
引用 10 楼 lwgreatperson 的回复:
如果你实在不知道怎么做,你可以先简单查询后,在递归。如果你想还是按照你那思路写的话查询返回的结果是List<Object[]> 形式的,你可以循环的将其构造成对象。
我的问题是嵌入式sql语句和在pl-sql developer同样的sql语句查到的东西不一样。不是如何构造的问题。java嵌入式sql查到的东西有错误。。。
-_-快乐 2012-12-22
  • 打赏
  • 举报
回复
如果你实在不知道怎么做,你可以先简单查询后,在递归。如果你想还是按照你那思路写的话查询返回的结果是List<Object[]> 形式的,你可以循环的将其构造成对象。
名字到底多长 2012-12-22
  • 打赏
  • 举报
回复
引用 5 楼 yang_lover 的回复:
如果你想让相关的字段合成对象,建议你建立一个bean,将这些字段组合成这个bean的对象,那么在查询的时候可以通过createSQLQuery(sql).addEntity(XXX.Class).list();来获取这个bean的list集合对象。
这也是一张表里面的自关联。找到本身名字的同时找到父亲公司的名字。和对象不对象没关系。
名字到底多长 2012-12-22
  • 打赏
  • 举报
回复
引用 6 楼 cqrf2006 的回复:
Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class); Hibernate 的 createSQLQuery()方法会把查询的数据映射为对象,你在后面加上实体类的类名就可以了
程序里取到的值是在debug模式下的然后我截的图。数据库最开始取到的值就有问题后面怎么弄都是错的吧。
名字到底多长 2012-12-22
  • 打赏
  • 举报
回复
引用 5 楼 yang_lover 的回复:
如果你想让相关的字段合成对象,建议你建立一个bean,将这些字段组合成这个bean的对象,那么在查询的时候可以通过createSQLQuery(sql).addEntity(XXX.Class).list();来获取这个bean的list集合对象。
程序里取到的值是在debug模式下的。数据库最开始取到的值就有问题后面怎么弄都是错的吧。
feng00~ 2012-12-21
  • 打赏
  • 举报
回复
Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class); Hibernate 的 createSQLQuery()方法会把查询的数据映射为对象,你在后面加上实体类的类名就可以了
  • 打赏
  • 举报
回复
如果你想让相关的字段合成对象,建议你建立一个bean,将这些字段组合成这个bean的对象,那么在查询的时候可以通过createSQLQuery(sql).addEntity(XXX.Class).list();来获取这个bean的list集合对象。
加载更多回复(4)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧