如何在hibernate中使用SQL查询删除给定ID的DB数据?

时间:2014-08-04 09:01:07

标签: java mysql sql hibernate spring-mvc

我为选择查询编写了以下控制器代码:

 @RequestMapping(value = "/listuserpermissions/{systemId}", method = RequestMethod.GET)
 public List<AlicePermissions> userPermissionsforRole(@PathVariable("systemId") int systemId) {

    List<Object[]> rows = userPermissionService.roleuserPermissionforRole(systemId);

    List<AlicePermissions> alicePermissions = new ArrayList<AlicePermissions>();
    for (Object[] object : rows) {
        AlicePermissions alicePermissions2 = new AlicePermissions();
        alicePermissions2.setPermId((Integer) object[0]);
        alicePermissions2.setPermName((String) object[1]);
        alicePermissions2.setPermDesp((String) object[2]);
        alicePermissions2.setPermParentId((Integer)object[3]);
        alicePermissions2.setPerm((BigInteger) object[4]);

        alicePermissions.add(alicePermissions2);
    }

    return alicePermissions;
}

UserPermissionService.java

 public List<Object[]> roleuserPermissionforRole(Integer systemId) {
    return dao.roleuserPermissionforRole(systemId);
}

UserPermissionDao.java

 public  List<Object[]> roleuserPermissionforRole(Integer systemId){

            List userPermission=super.currentSession().
                    createSQLQuery("select   
 p.prm_permission_id,p.prm_permission_name,p.prm_short_description,p.prm_parent_id,case when 
 rp.rop_permission_id is null then 0 else 1 end as perm from prm_user_permission p left outer 
 join rop_role_permissions rp on p.prm_permission_id = rp.rop_permission_id where prm_system_id 
 ='"+systemId+"'").list();
    return  userPermission;

}

我希望在插入新数据之前通过给定ID删除这些数据。我的意思是如果我们给出一个id =&#34; 1&#34;,那么它应该删除表中id为1的所有行数据。需要一些关于如何使用SQL查询删除的指导,如上面给出的选择查询。

感谢。

1 个答案:

答案 0 :(得分:0)

我不确定我是否把一切都搞定了,但无论如何这里是一个可能的解决方案:

您可以调用executeUpdate(),而不是在查询实例上调用list()。除此之外,这将把查询发送到数据库以更新数据。您的查询可能看起来像

super.currentSession().createSQLQuery("DELETE FROM table WHERE id = ?")

在哪里?是实际值的占位符。如果需要更复杂的约束,则需要更改WHERE子句。只需在插入新数据之前将查询发送到数据库(使用不同的查询)。

关于查询的参数,你真的应该考虑使用适当的方法来设置参数(参见http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html#d0e13930)。这将有效地防止SQL注入。

我希望这会有所帮助。