HQL中两次 left join 后传值的问题

金杯独酒 2016-08-29 02:18:42

使用Hibernate sql 语句 两次 left join 后 持久化类竟然只能收到 前两次 left join 表的数据;
话不多说贴出代码:




public class ReportInfo implements Serializable{
/**返回报表持久化类*/
/** 此结果集应为 data表,人员表,部门表,系统表*/
/** 此结果集是报表显示的基本数据集*/
/**
data_id 数据表ID
data_time 数据日期
data_e_id 人员ID
data_data 数据信息
e_No 人员工号
e_name 人员姓名
data_d_id 部门ID
d_name 部门名称
s_id 系统ID
s_name 系统名称
*/

private Integer data_id;
private String data_time;
private Integer data_e_id;
private String data_data;
private String e_No;
private String e_name;
private Integer d_id;
private String d_name;
private Integer s_id;
private String s_name;



/** dao层代码*/
/** 根据日期查询日报信息 */
public List<ReportInfo> selectForDataInfo(String string) {
ReportInfo reportInfo =null;

/** 通过getHibernateTemplate()获取Session*/
Session currentSession = this.getHibernateTemplate()
.getSessionFactory().getCurrentSession();
Transaction transaction = currentSession.beginTransaction();
/**此处sql 大意是根据s_table 表 left join 了四次*/
String SQL = "SELECT info.data_id,info.data_time,info.data_e_id,info.data_data,e.e_No,e.e_name,d.d_id,d.d_name,s.s_id,s.s_name FROM s_table s LEFT JOIN d_table d ON s.d_id= d.d_id LEFT JOIN datainfo_table info ON s.s_id = info.data_s_id AND info.data_time LIKE '%"+string+"%' LEFT JOIN e_table e ON info.data_s_id=e.e_id";
//SELECT aaa.data_id,aaa.data_time,aaa.data_e_id,aaa.data_data,aaa.e_No,aaa.e_name,s.d_id,aaa.d_name,s.s_id,s.s_name FROM s_table s LEFT JOIN (SELECT df.data_id,df.data_time,df.data_d_id,df.data_data,df.data_s_id,df.data_e_id,e.e_No,e.e_name,d.d_name,s.s_id,s.s_name FROM datainfo_table df,d_table d,e_table e,s_table s WHERE df.data_e_id=e.e_id AND df.data_d_id = d.d_id AND df.data_s_id=s.s_id AND df.data_time LIKE '%2016-08-28%' ) aaa ON aaa.s_id =s.s_id;
//SELECT aaa.data_id data_id,aaa.data_time,aaa.data_e_id,aaa.data_data,aaa.e_No,aaa.e_name,s.d_id,aaa.d_name,s.s_id,s.s_name FROM s_table s LEFT JOIN (SELECT df.data_id,df.data_time,df.data_d_id,df.data_data,df.data_s_id,df.data_e_id,e.e_No,e.e_name,d.d_name,s.s_id,s.s_name FROM datainfo_table df,d_table d,e_table e,s_table s WHERE df.data_e_id=e.e_id AND df.data_d_id = d.d_id AND df.data_s_id=s.s_id AND df.data_time LIKE '%"+string+"%' ) aaa ON aaa.s_id =s.s_id;
/** 通过Session.createSQLQuery(SQL)方法,可以使用SQL语句*/
/** addEntity(ReportInfo.class)方法指明结果集用哪个持久化类接收*/
/** 此持久化类在数据库表中的体现一直为null,只用于接收结果用*/
SQLQuery createSQLQuery = currentSession.createSQLQuery(SQL).addEntity(ReportInfo.class);
List<ReportInfo> lists =createSQLQuery.list();
for(ReportInfo rt:lists){
System.out.println(rt+"66666");
}
transaction.commit();
return lists;

}



那么 ,怪事出现了:
在sql中运行 ok , 虽然列的方向反了,应该是从右向左,但结果是想要的;如图:


运行dao层代码后,就变成下面这样了! 有且仅有 4个值 接收到了,其他的都无值。
这些参数是位于基表 s_table 与 第一个 left join 的 d_table 中,再后面的表的值就接不到了。 求教 各位大神 怎要才能 接到值呢?


ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=1, d_name=德裕店, s_id=1, s_name=德裕西联系统]66666
ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=1, d_name=德裕店, s_id=2, s_name=德裕小吃城系统]66666
ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=2, d_name=确山店, s_id=3, s_name=确山西联系统]66666
ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=2, d_name=确山店, s_id=4, s_name=确山家电系统]66666
ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=3, d_name=固始店, s_id=5, s_name=固始西联系统]66666
ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=3, d_name=固始店, s_id=6, s_name=固始小吃城系统]66666
ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=4, d_name=潢川店, s_id=7, s_name=潢川西联系统]66666
ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=4, d_name=潢川店, s_id=8, s_name=潢川家电系统]66666
ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=5, d_name=淮滨店, s_id=9, s_name=淮滨西联系统]66666
ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=5, d_name=淮滨店, s_id=10, s_name=淮滨家电系统]66666
ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=6, d_name=罗山店, s_id=11, s_name=罗山西联系统]66666
ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=7, d_name=明港店, s_id=12, s_name=明港西联系统]66666
ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=8, d_name=和美店, s_id=13, s_name=和美西联系统]66666
ReportInfo [data_id=null, data_time=null, data_e_id=null, data_data=null, e_No=null, e_name=null, d_id=9, d_name=生活广场店, s_id=14, s_name=生活广场西联系统]66666

...全文
293 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
金杯独酒 2016-08-31
  • 打赏
  • 举报
回复
引用 12 楼 Kainnnn的回复:
......
金杯独酒 2016-08-31
  • 打赏
  • 举报
回复
引用 11 楼 习惯性出没的回复:
你还能再仔细点吗
金杯独酒 2016-08-31
  • 打赏
  • 举报
回复
引用 9 楼 自由自在_Yu的回复:
SQLQuery createSQLQuery = currentSession.createSQLQuery(SQL); 执行到这儿,调试查看结果对不对
感谢提醒,已解决,我传值日期为当日,但是当日无数据
Kainnnn 2016-08-31
  • 打赏
  • 举报
回复
......
codingjav 2016-08-31
  • 打赏
  • 举报
回复
你还能再仔细点吗
金杯独酒 2016-08-30
  • 打赏
  • 举报
回复
引用 5 楼 MONKEY_D_GARP的回复:
你的数据库用的什么,HQL方言又是什么
在数据库中sql语句是能查到的。用query接收时候接收可以接收到,但是不全。只能收到4个字段。
金杯独酒 2016-08-30
  • 打赏
  • 举报
回复
引用 5 楼 MONKEY_D_GARP的回复:
你的数据库用的什么,HQL方言又是什么
数据库用的是mysql
nikyotensai 2016-08-30
  • 打赏
  • 举报
回复
你的数据库用的什么,HQL方言又是什么
自由自在_Yu 2016-08-30
  • 打赏
  • 举报
回复
SQLQuery createSQLQuery = currentSession.createSQLQuery(SQL); 执行到这儿,调试查看结果对不对
金杯独酒 2016-08-30
  • 打赏
  • 举报
回复
哪位大神能看看啊,我直接发大红包,以表心意。
  • 打赏
  • 举报
回复
先不要用实体接收, 先看看如果直接返回,返回了哪些数据
金杯独酒 2016-08-29
  • 打赏
  • 举报
回复
引用 2 楼 MONKEY_D_GARP的回复:
HQL是这么用的吗?!Bean不是要对应表吗
ReportInfo 这个持久化类,就是对应表的。 我是通过hibernate,用sql语句查询后返回值用ReportInfo接收出了问题。不好意思没写清楚。本来用的是HQL后来改用了sql。
nikyotensai 2016-08-29
  • 打赏
  • 举报
回复
HQL是这么用的吗?!Bean不是要对应表吗
金杯独酒 2016-08-29
  • 打赏
  • 举报
回复
自己顶

67,513

社区成员

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

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