Использование объединения в Hibernate HQL запрос на обновление - PullRequest
4 голосов
/ 27 октября 2009
string query = "update User u set u.PointsTotal = 1 join u.Rounds r where r.RoundId = :round and (r.Row1 & :val) > 0";

NHibernateSession.CreateQuery(query)
    .SetByte("val", (byte)val)
    .SetInt32("round", roundId)
    .ExecuteUpdate();

Просто выдает мне «Указанный ключ отсутствует в словаре».

И да, отношения работают как положено, могут делать выбор ....

1 Ответ

5 голосов
/ 27 октября 2009

Хорошо, решил этот вопрос, похоже, что вы должны сделать подзапрос ...

string query = "update User u set u.PointsTotal = 1 where u.Id in (select u2.Id from User u2 join u2.Rounds r where r.RoundId = :round and (r.Row1 & :val) > 0)";

NHibernateSession.CreateQuery(query)
    .SetByte("val", (byte)val)
    .SetInt32("round", roundId)
    .ExecuteUpdate();
...