目的:删除满足条件的数据。 出现问题:参数为null时,程序出现异常。 问题描述:之前代码如下: sql="delete table where pId=? and sId=?"; query.setParameter(0, pId); query.setParameter(1, sId); 现在遇到一个问题,就是如果参数传一个null的时候,hibernate不会将sql转换成is null,程序将会出现错误,所以修改成如下: //两个参数均不是主键 public void deleteTable(Long sId, Long pId) { String sql = "delete table where 1=1"; if (null == pId) { sql = sql + " and pIdis null"; } else { sql = sql + " and pId=?"; } if (null == sId) { sql = sql + " and sIdis null"; } else { sql = sql + " and sId=?"; } Query query = getSession().createQuery(sql); //这样判断简直让人崩溃,有啥好的处理方式? if (null != pId && null == sId) { query.setParameter(0, pId); } if (null != pId && null != sId) { query.setParameter(0, pId).setParameter(1, pId); } if (null == pId && null != sId) { query.setParameter(0, pId); } query.executeUpdate(); } 这样是可以实现业务逻辑的,但是显然程序很笨重,不知到hibernate本身有没有灵活、优雅的方式解决这个问题?