首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用HQL语句按id列表删除多条记录

使用HQL语句按id列表删除多条记录
EN

Stack Overflow用户
提问于 2011-01-12 23:35:17
回答 2查看 6.3K关注 0票数 7

我想要删除某个实体的多条记录,该实体的id在我拥有的id列表中。我正在尝试使用NHibernate在C#中执行此操作。

我有一份身份证列表。

我想做一些类似的事情:

代码语言:javascript
运行
复制
var idList = new List<Guid>() { Guid.NewGuid(),Guid.NewGuid()};

_session.CreateQuery("DELETE FROM MapsItem o WHERE o.Id = IN :idList")
    .SetParameterList("idList", idList)
    .ExecuteUpdate();

这将导致以下错误:

代码语言:javascript
运行
复制
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时,错误是这样的:

代码语言:javascript
运行
复制
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不明确。

我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2011-01-12 23:37:57

删除等号:

代码语言:javascript
运行
复制
DELETE FROM myObject o WHERE o.Id IN :idList
票数 5
EN

Stack Overflow用户

发布于 2011-01-13 00:49:06

删除要签名的等号,您的输入也是不正确的。应该是这样的。我建议你改用string.Format。

代码语言:javascript
运行
复制
var idList = new List<Guid>() { Guid.NewGuid(),Guid.NewGuid()};

_session.CreateQuery(string.Format("DELETE FROM myObject o WHERE o.Id  IN     
({0})",string.Join(",",idList.ToArray()))).ExecuteUpdate();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4670595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档