1. hibernate 在使用HQL时需要注意,相应的语句中使用对象时需要使用对应大小写一致的对象书写,勿使用不一致的形式。查询使用的是面向对象的形式,因此直接使用类名,属性名,大小写敏感。属性getAbc(),也应该是abc字样。
举例: 标黄的地方为实体类,hql中切记不能使用如” from TUSERSROLES t”
String hql = " from Tusersrolest ";
Map<String,Object> params = newHashMap<String,Object>();
hql =addWhere(userRole, hql, params);
String totalHql = " select count(*) "+ hql;
hql = addOrder(userRole, hql);
List<Tusersroles>lt = userRoleDao.find(hql,params,userRole.getPage(),userRole.getRows());
List<UserRoles> lm = new ArrayList<UserRoles>();
2.
hibernate 中hql的写法:在hibernate查询语句中封装对象,可以使用new Tmenus(...),或者使用实体对象简称t ,但是不能使用 “ t from Tmenus t ,Tmenusroles mr where ...”。如下两种方式均可。
//String hql_menu = " select new Tmenus(t.menuid,t.pid,t.url,t.text,t.state,t.iconcls) from Tmenus t , Tmenusroles mrwhere t.menuid = mr.menuid and mr.rolesid = :rolesid ";
String hql= " select t from Tmenus t , Tmenusroles mr where t.menuid= mr.menuid and mr.rolesid = :rolesid ";
如果查询String hql = " from Tusersroles t ,Tusers u ,Troles r where t.usersid = u.usersid and t.rolesid = r.rolesid ";返回的是内连接,且是以数组对象的方式返回,且对应from后面表的顺序放到数组中的数组中,对应这个语句返回的是(在没有使用一对多、多对多的关系情况下)
List lt = userRoleDao.findObjects(hql,params,userRoles.getPage(),userRoles.getRows());
for(int i=0;i<lt.size();i++){
Tusersroles ur = (Tusersroles)objs[0];
Tusers u = (Tusers)objs[1];
Troles r = (Troles)objs[2];
.....
}
3.
hibernate中保存时使用save()和使用savaOrUpdate()方法的注意事项:save如果主键有重复,则会提示主键插入违反唯一性约束,但是如果使用saveOrUpdate()则会将重复主键行的数据进行更新而不是插入一新行(注意该种情况容易出现问题),因此在插入时使用save方法,而在更新是则使用saveOrUpdate方法处理