解决方案 »
- 关于hibernate 多对多中间表主键的问题
- XML的问题
- 请问部署到tomcat下的application的classpath是怎么确定的啊,我看了下部署在下面的文件夹里面没有classpath的信息啊?
- dwr与struts整合的问题
- struct2与xwork的关系
- entity createQuery insert问题
- 一个关于Tomcat运行的问题!请高手指教!
- 会 javamail 的进来 go go go..........
- 有研究用JAVA生成PDF格式报表的朋友么?
- JAVA 文件流 读写 冲突问题
- SSH项目数据插入报错
- 数据库里取出的整数 我想除以100 保留两位小数 结果定义为什么类型啊
左连接使用join时,好像是with吧,你把with加上,然后把之前sql里面on的后半部分加上。试试看。
试试
如果是这样,两种方法:1.你可以使用原生查询执行sql 2.不要使用join,hibernate不支持left join语法,给你个文章看看,当然建议使用92语法
http://awaitdeng.iteye.com/blog/735063http://awaitdeng.iteye.com/blog/735063
直接使用 From A就可以了。需要调用B的时候 直接用 A。B就可以了
final StringBuffer sql=new StringBuffer();
sql.append("select d.deviceinfoId,d.deviceinfoName,s.devicetypeName,w.warnNotifyDeviceId,l.levelName,w.warnNotifyType,l.levelId from device_deviceinfo as d ");
sql.append(" left join sys_devicetype as s on d.deviceinfoTypeId=s.devicetype left join device_coreinfo as c on d.deviceinforCoreId=c.coreinfoId ");
sql.append(" left join sys_warnnotify as w on d.deviceinfoId=w.warnNotifyDeviceId left join sys_warnlevel as l on w.warnNotifyLevelId=l.levelId ");
sql.append(" where 1=1 ");
if(areaId!=null&&areaId>0){
sql.append(" and c.coreinfoAreaId="+areaId+"");
}
if(deviceTypeId!=null&&deviceTypeId>0){
sql.append(" and s.devicetype="+deviceTypeId+"");
}
return (List) getHibernateTemplate().execute(
new HibernateCallback() {
public List doInHibernate(final Session s)
throws HibernateException, SQLException {
Query query = s.createSQLQuery(sql.toString());//执行普通sql
List list = query.list();
return list ;
}
});
}
其实都差不多的
A表:
id , name , bid
1 名字1
2 名字2 1
3 名字3 2B表:
id, name, flag
1 张三 true
2 李四 false我之前用的hql写法如下:
string hql = "from A left join A.B where b.flag='true'";
这个时候返回的结果只有A表的id=2这条数据我现在修改如下即可实现:
string hql = "from A left join A.B where (b.flag is null or b.flag='true')";
这样就实现了我返回id=1和id=2这两条数据了。再次谢谢各位。