使用hibernate时出现了点问题,现请教各位。
目的:
删除满足条件的数据。
出现问题:
参数为null时,程序出现异常。
问题描述:
之前代码如下:
[code="java"]
sql="delete table where pId=? and sId=?";
query.setParameter(0, pId);
query.setParameter(1, sId);
[/code]
现在遇到一个问题,就是如果参数传一个null的时候,hibernate不会将sql转换成is null,程序将会出现错误,所以修改成如下:
[code="java"]
//两个参数均不是主键
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();
}
[/code]
这样是可以实现业务逻辑的,但是显然程序很笨重,不知到hibernate本身有没有灵活、优雅的方式解决这个问题?