日期:2014-05-17  浏览次数:20855 次

hibernate的hql查询语句问题
两个对象
public class Manager {
  private Integer id; //管理员ID号
  private String name; //管理员名称
  private String pwd; //管理员密码
  private Purview purview;
  省略set和get方法
}

public class Purview {
  private Integer id;
  private int sysset=0; //系统设置权限
  private int readerset=0; //读者管理权限
  private int bookset=0; //图书管理权限
  private int borrowback=0; //图书借还权限
  private int sysquery=0; //系统查询权限
  private Manager manager;
  省略set和get方法

}

方法query_p
public Manager query_p(String str) {
  String hql = "select m.*,p.sysset,p.readerset,p.bookset,p.borrowback,p.sysquery from Manager m 
  left join Purview p on m.id=p.id where m.name='"+str+"'";
  Manager manager1 = (Manager)this.getHibernateTemplate().find(hql).get(0);
  return manager1;
  }


我写这个方法返回Manager类型,但是不对
问:应该怎么写,才能实现联合查询返回Manager,Manager类里的purview也要有值。



------解决方案--------------------
换个写法嘛
public Manager query_p(String str) {
String hql="from Manager where name="+str;
Manager manager = (Manager)this.getHibernateTemplate().find(hql).get(0);
manager1.getPurview();
return manager;
}
红色的地方我没有判断,应该判断是不是为空和size是不是>0
------解决方案--------------------
Manager要和Purview做映射关联。
也就是Manager的po里面要有Purview的属性。看是一对一还是一对多或是多对多,反正要有Purview。
Manager的映射文件里也要有Purview关联。

然后在hql时直接这样写:
from Manager m join fetch m.purview p where m.name='"+str+"'";
这里的m.purview说是你Manager里的属性purview 或是purviews