Ich möchte mehrere Datensätze einer bestimmten Entität löschen, wobei die ID der Entität in der Liste der IDs, die ich habe, ist. Ich versuche diese Aktion in C# mit NHibernate auszuführen.Löschen mehrerer Datensätze nach Liste von IDs mit HQL-Anweisung
Was ich habe, ist eine Liste von Ids.
Ich möchte etwas ähnliches wie dies tun:
var idList = new List<Guid>() { Guid.NewGuid(),Guid.NewGuid()};
_session.CreateQuery("DELETE FROM MapsItem o WHERE o.Id = IN :idList")
.SetParameterList("idList", idList)
.ExecuteUpdate();
Dies führt zu dem folgenden Fehler:
Exception of type 'Antlr.Runtime.NoViableAltException' was thrown. near line 1, column 33 [DELETE FROM Album o WHERE o.Id = IN :idList]
Die Abfrage ist eine HQL-Anweisung.
Was ist falsch in der HQL-Abfrage.
Die beiden angegebenen Antworten auf die obige Frage geben eine korrekte Lösung. Wenn ich die HQL ausführe, ist der Fehler jedoch wie folgt:
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 (? , ? , ? , ? , ? , ?)]
Die Entität MapsItem stammt von der Entität BaseEntity. Beide haben eine Eigenschaften-ID in der Datenbank. Die SQL-Abfrage kann nicht ausgeführt werden, da die Spalten-ID in der WHERE-Klausel zweideutig ist.
Wie kann ich dieses Problem lösen?
Ich habe das gleiche Problem (mehrdeutiger Spaltennamen ‚id‘) festgestellt, während Bulk-Update abgeleitete Elemente versuchen, mit query.ExecuteUpdate – Silviu
Sie müssen SQL fallen zurück! – Rippo