【问题标题】:Hibernate Query doesn't work as expected休眠查询无法按预期工作
【发布时间】:2012-08-22 15:27:50
【问题描述】:

您好,我有以下查询:

 String hql = "UPDATE Raumreservierung as rr " +
              "set VON = :begin " +
              "where VON = :Von " +
              "and Raum_ID IN (SELECT r.ID FROM Raum r " +
              "inner join r.Panel as pl with pl.ID = " + clientId + "";



 IQuery query = CurrentSession.CreateQuery(hql);
                query.SetParameter("begin", DateTime.Now);
                query.SetParameter("Von", v.Von);
                int result = query.ExecuteUpdate();

查询对“VON”进行更新。这工作正常,但查询的其余部分不起作用。查询的其余部分似乎不起作用。但没有得到任何错误。

对于查询的其余部分,我指的是查询的以下部分:

"and Raum_ID IN (SELECT r.ID FROM Raum r " +
"inner join r.Panel as pl with pl.ID = " + clientId + "";

因为它应该只在“VON”列上发生更新,例如当“clientId”为“AT2”时 但是那部分不起作用。因为更新也发生在其他 clientId 上。

【问题讨论】:

  • “查询对 VON 进行更新”是什么意思 - 它会更新名为 VON 的字段吗?它是否更新了正确数量(子集)的记录?哪个“查询的其余部分不起作用”?
  • 你真的应该更好地解释这一点。什么是“查询的其余部分”? where 部分不正确?此外,您还有一个附加参数集 - “Bis”。上面的 HQL 查询中没有提到。
  • 查看发送到您的数据库 (nhprof.com) 的确切查询并在 SQL Server Manager Studio 中尝试(如果您使用 SQL Server)

标签: sql hibernate nhibernate


【解决方案1】:

您忘记关闭括号了。

(另外,您也应该为 clientId 使用参数)

【讨论】:

  • 嗨,如果我为 clientId 设置了一个参数,例如 query.SetParameter("PanelId", clientId);我收到错误:找不到名称参数 [PanelId]Stack
  • 嗯...你需要先声明参数...而不是串联一个字符串。
  • 如果 :von 是一个字符串,在查询中应该是这样的:“where VON = ':Von'” +
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 2011-08-06
  • 2017-09-19
  • 2018-10-13
相关资源
最近更新 更多