冬眠。 HQL更新用户类型

发布于 2024-10-31 07:04:02 字数 1564 浏览 1 评论 0原文

是否可以更新 HQL 查询中的用户类型字段?

当我尝试在 where 子句中使用用户类型时,一切正常。

  getSession()
      .createQuery("update " + AvatarDataSet.class.getName() + " set removed=false where id=:avatarId and position =:pos ")
      .setParameter("pos", ds.getPosition(), Hibernate.custom(ConstPointUserType.class))
      .setParameter("avatarId", ds.getPersistentId().getLongId())
      .executeUpdate();

update avatar set is_removed=false where Id=? and position_x=? and position_y=? and position_z=?

但是当我尝试使用用户类型作为要更新的字段时,我遇到了异常。似乎hibernate正在尝试翻译sql字符串“position_x=?和position_y=?和position_z=?”中的“位置”占位符无论如何,即使在更新的设置部分... :(

      getSession()
      .createQuery("update " + AvatarDataSet.class.getName() + " set position = :pos where dbId=:avatarId") 
      .setParameter("pos", ds.getPosition(), Hibernate.custom(ConstPointUserType.class))
      .setParameter("avatarId", ds.getPersistentId().getLongId())
      .executeUpdate();

org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: AND near line 1, column 51 [update dataSets.avatar.AvatarDataSet set position = :pos where dbId=:avatarId]
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
                          .......

编辑:

这是一个错误。仍未解决。http://opensource.atlassian.com/projects/hibernate/browse/HHH-5936

Is it possible to update user type field in HQL query?

When I am trying to use user type in where clause everything works fine.

  getSession()
      .createQuery("update " + AvatarDataSet.class.getName() + " set removed=false where id=:avatarId and position =:pos ")
      .setParameter("pos", ds.getPosition(), Hibernate.custom(ConstPointUserType.class))
      .setParameter("avatarId", ds.getPersistentId().getLongId())
      .executeUpdate();

update avatar set is_removed=false where Id=? and position_x=? and position_y=? and position_z=?

But when I am trying to use user type as a field to be updated I am getting an exception. Seems like hibernate is trying to translate "position" placeholder in sql string "position_x=? and position_y=? and position_z=?" in any case even in set part of update... :(

      getSession()
      .createQuery("update " + AvatarDataSet.class.getName() + " set position = :pos where dbId=:avatarId") 
      .setParameter("pos", ds.getPosition(), Hibernate.custom(ConstPointUserType.class))
      .setParameter("avatarId", ds.getPersistentId().getLongId())
      .executeUpdate();

org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: AND near line 1, column 51 [update dataSets.avatar.AvatarDataSet set position = :pos where dbId=:avatarId]
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
                          .......

Edit:

This is a bug. Still unresolved. http://opensource.atlassian.com/projects/hibernate/browse/HHH-5936

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文