【问题标题】:How to rewrite this sql code in HQL如何在 HQL 中重写此 sql 代码
【发布时间】:2017-07-29 20:20:30
【问题描述】:

我需要获取“Manager”表的“name”列。并显示所有带有“Manager.name”的“Family”列。

SELECT Family.id, Family.name,Family.surname, Manager.name[Manager Name]
FROM Family
INNER JOIN Manager
ON Family.managerId=Manager.id;

我可以在管理工作室中执行这个 SQL 查询,但是当我尝试添加到休眠 (DAO) 类时,我遇到了这个错误:

请求处理失败;嵌套异常是 org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌: 在第 4 行第 1 列附近打开 [SELECT Family.id, Family.name,Family.surname, Manager.name AS ManagerName

【问题讨论】:

  • 怎么用是什么意思?
  • 我可以在管理工作室中执行这个 sql 查询,但是当我尝试添加到休眠(DAO)类时,我遇到了这个错误:请求处理失败;嵌套异常是 org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:在第 4 行第 1 列附近打开 [SELECT Family.id, Family.name,Family.surname, Manager.name AS ManagerName @Alex
  • 请不要在 cmets 中发布额外的信息。这不是一个论坛。编辑您的问题并添加其他信息(您已在上面的评论中发布)。
  • sorry.im new here.这是我的第一个问题。谢谢您的建议
  • 一切都好。在 SO 或任何其他网站上提问时请阅读此内容:stackoverflow.com/help/how-to-ask

标签: sql hibernate hql


【解决方案1】:

无需使用ON Family.managerId=Manager.id;。只需使用示例定义两个实体之间的关系:

@ManyToOne
@JoinColumn(name="managerId")
private Manager manager;

SELECT f.id, f.name,f.surname, m.name
FROM Family AS f
INNER JOIN Manager AS m

更新

如果 Family 与 Manager 具有这样的多对一关系,您可以直接加载 manager 的属性,而无需使用 INNER JOIN:

@ManyToOne
@JoinColumn(name="managerId")
private Manager manager;

SELECT f.id, f.name,f.surname, f.manager.name
FROM Family AS f

【讨论】:

  • 我仍然有错误。顺便说一下我更新我的查询图像
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 2018-08-09
  • 2018-02-11
  • 2019-08-19
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
相关资源
最近更新 更多