解决此问题的最佳做法是什么?有内置的批处理功能吗?
样例代码:
using (ITransaction transaction = _session.BeginTransaction()) { _session.Delete("FROM myObject o WHERE o.Id = IN(1,2,...99999)"); transaction.Commit(); }
提前致谢。
HQL支持IN子句,如果使用setParameterList,甚至可以传递一个集合。
var idList = new List<int>() { 5,3,6,7 }; _session.CreateQuery("DELETE MyDataClass o WHERE o.Id IN (:idList)") .SetParameterList("idList", idList) .ExecuteUpdate();
请注意,就像ddango在评论中提到的那样,将不会执行在对象中指定的关系级联,因为运行HQL查询只是转换为DB查询,并且实际上不会加载任何实体对象。