我正在尝试使用Spring的HibernateTemplate编写一个DAO,它支持基于几个条件从表中删除。例如,示例SQL:
Delete from Employee where Name='E01' AND Dept='D01' AND Address='ADR01';
我为此查询编写了以下代码:
session.createQuery("delete from Employee where name=? and dept=? and address=?")
.setParameter(0, name).setParameter(1, dept).setParameter(2, address)
.executeUpdate();
如果where子句中的所有列都有一些值,它可以正常工作。但是,如果我尝试删除任何列中包含“NULL”的记录,则它不起作用。
生成的SQL Query始终采用以下格式:
Delete from Employee where Name=? AND Dept=? AND Address=?;
当然无法处理NULL比较 - SQL需要“IS NULL
”来检查NULL,而"=null"
在这里不起作用。因此,当我在Java代码中将dept作为null传递时,生成的SQL将采用以下形式:
Delete from Employee where Name='E01' AND Dept=null AND Address='ADR01';
这不会删除DB中具有NULL值的记录,因为正确的条件是"Dept IS NULL"
;并且"Dept=null"
不起作用!无论如何比较where子句中的NULL值而不使用本机查询?
注: