我想删除某个实体的多个记录,其中实体的id在我所拥有的ID列表中.我正在尝试使用NHibernate在C#中执行此操作.
我所拥有的是一个ID列表.
我想做类似的事情:
var idList = new List<Guid>() { Guid.NewGuid(),Guid.NewGuid()}; _session.CreateQuery("DELETE FROM MapsItem o WHERE o.Id = IN :idList") .SetParameterList("idList",idList) .ExecuteUpdate();
这导致以下错误:
Exception of type 'Antlr.Runtime.NoViableAltException' was thrown. near line 1,column 33 [DELETE FROM Album o WHERE o.Id = IN :idList]
该查询是一个HQL语句.
HQL查询有什么问题.
对上述问题提供的两个答案都给出了正确的解决方案.但是,当我执行HQL时,错误是这样的:
could not insert/select ids for bulk delete[sql: insert into #MapsItem SELECT mapsitem0_.Id as Id FROM MapsItem mapsitem0_ inner join BaseEntity mapsitem0_1_ on mapsitem0_.Id=mapsitem0_1_.Id WHERE Id in (?,?,?)]
实体MapsItem派生自实体BaseEntity.两者在数据库中都有属性Id.无法执行SQL查询,因为WHERE子句中的列ID是不明确的.
我怎么解决这个问题 ?
解决方法
删除等号:
DELETE FROM myObject o WHERE o.Id IN :idList