HibernateTemplate按条件删除,可能包括检查NULL

时间:2013-12-05 12:33:48

标签: java sql hibernate null sql-delete

我正在尝试使用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值而不使用本机查询?

注:

  1. 我不想使用HibernateTemplate的deleteAll(Collection)方法,因为它需要首先获取记录然后删除它们 - 即多于1个SQL查询。我想使用单个SQL查询实现删除,而无需先选择或需要本机查询。
  2. 我知道Spring现在使用SessionFactory建议,但我在现有代码库中遇到了HibernateTemplate。

0 个答案:

没有答案