4

所以我直接从我的数据库中检索了一个对象列表并希望删除它们。但是,从文档看来,我必须在一个字符串中构造整个 SQL 查询,并将该字符串传递给 createQuery 方法才能删除。难道没有更好的方法吗?

    List<Foo> confirm = (List<Foo>) criteria.list();
    session.delete(confirm.get(0)); //Works for single object, 
                                    //what about batching?
4

2 回答 2

8

您可以遍历实体并为每个实体调用 delete,或者构造一个删除查询:

String hql = "delete from Foo f where f.id in :fooIds";
session.createQuery(hql).setParameterList("fooIds", fooIds).executeUpdate();

不过,请务必了解与此类 DML 查询相关的限制和注意事项。它们在文档中进行了描述。

于 2013-01-07T19:10:28.970 回答
3

String hql = "delete from Foo f where f.id in :fooIds"; 应该是 String hql = "delete from Foo f where f.id in (:fooIds)"; 或者这样的异常会抛出:“线程“主”org.hibernate.hql.ast.QuerySyntaxException中的异常:意外令牌:“我的休眠版本是3.6.0.Final。

于 2013-09-16T06:16:32.270 回答