Hibernate在SQL语句中遇到的三个问题

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++){

  Object [] objs = (Object []) lt.get(i);
Tusersroles ur = (Tusersroles)objs[0];
Tusers u = (Tusers)objs[1];

Troles r = (Troles)objs[2];

.....

        }

3.

hibernate中保存时使用save()和使用savaOrUpdate()方法的注意事项:save如果主键有重复,则会提示主键插入违反唯一性约束,但是如果使用saveOrUpdate()则会将重复主键行的数据进行更新而不是插入一新行(注意该种情况容易出现问题),因此在插入时使用save方法,而在更新是则使用saveOrUpdate方法处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值