Quiero eliminar varios registros de una entidad determinada donde el ID de la entidad se encuentra en la lista de identificadores que tengo. Estoy intentando realizar esta acción en C# con NHibernate.Eliminar múltiples registros por lista de identificadores con declaración HQL
Lo que tengo es una lista de Ids.
quiero hacer algo similar a esto:
var idList = new List<Guid>() { Guid.NewGuid(),Guid.NewGuid()};
_session.CreateQuery("DELETE FROM MapsItem o WHERE o.Id = IN :idList")
.SetParameterList("idList", idList)
.ExecuteUpdate();
Esto se traduce en el siguiente error:
Exception of type 'Antlr.Runtime.NoViableAltException' was thrown. near line 1, column 33 [DELETE FROM Album o WHERE o.Id = IN :idList]
La consulta es una sentencia HQL.
¿Qué hay de malo en la consulta HQL.
Las dos respuestas proporcionadas a la pregunta anterior dan una solución correcta. Sin embargo, cuando ejecuto el HQL, el error es el siguiente:
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 (? , ? , ? , ? , ? , ?)]
La entidad MapsItem deriva de la entidad BaseEntity. Ambos tienen un Id de propiedad en la base de datos. La consulta SQL no se puede ejecutar porque el Id de la columna en la cláusula WHERE es ambiguo.
¿Cómo puedo resolver este problema?
que he encontrado el mismo problema (nombre de la columna ambigua 'id') mientras trata de elementos derivados de actualización masiva utilizando Query.executeUpdate – Silviu
Es necesario volver a caer a SQL! – Rippo