【问题标题】:How to delete DB data by given ID using SQL query in hibernate?如何在休眠中使用 SQL 查询按给定 ID 删除数据库数据?
【发布时间】:2014-08-04 09:01:07
【问题描述】:

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

 @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="1",那么它应该删除表中 id=1 的所有行数据。需要一些指导如何使用 SQL 查询删除,如上面给出的选择查询。

谢谢。

【问题讨论】:

    标签: java mysql sql hibernate spring-mvc


    【解决方案1】:

    我不太确定我是否做对了,但无论如何这里有一个可能的解决方案:

    您可以调用 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注入。

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 2016-10-28
      • 1970-01-01
      • 2012-05-18
      相关资源
      最近更新 更多