今天写代码的时候,遇到个问题需要用join把几张表的数据合并查询
"SELECT a.actionName FROM SysAction(类名) a JOIN RoleMenu r ON a.menuId = r.menuId WHERE a.type = 1 ”。
刚开始写进去的时候用的是hql模版查询
getHibernateTemplate().execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
Query query = session.createQuery(hql);
for (int i = 0 ; i < roleIdList.size() ; i++) {
query.setParameter(i , roleIdList.get(i));
}
return query.list();
}
当然,测试的时候各种报错,包括“unexcepted 'ON' in hql。。。。。。”之类各种错。
然后去看API,偶然发现有个方法session.createSQLQuery(sql);这个方法可以直接丢sql语句进去查询。
于是将语句改成"SELECT a.actionName FROM yys_action(表名) a JOIN role_menu r ON a.menuId = r.menuId WHERE a.type = 1 ”。
之后居然能query出结果了。
经常看到有小伙伴问如何在hibernate中使用sql语句,顺道发出来给小伙伴们看一看咯。