Java HQL连接语句

Java HQL连接语句,java,sql,hibernate,hql,spring-roo,Java,Sql,Hibernate,Hql,Spring Roo,我有一个班的员工。它有一个主键ID和一个名为supervisorID的列。我想将主管ID显示为员工姓名,因此我必须将其连接回同一个表。我正在使用SpringRoo和Hibernate,所以我需要创建一个HQL查询来完成这项工作,但我不知道如何将SQL转换为HQL,下面是SQL查询的一个示例 SELECT e.ID, e.name AS Employee, s.name AS Supervisor FROM employee e INNER JOIN employee s ON

我有一个班的员工。它有一个主键ID和一个名为supervisorID的列。我想将主管ID显示为员工姓名,因此我必须将其连接回同一个表。我正在使用SpringRoo和Hibernate,所以我需要创建一个HQL查询来完成这项工作,但我不知道如何将SQL转换为HQL,下面是SQL查询的一个示例

SELECT e.ID, e.name AS Employee, s.name AS Supervisor  
FROM employee e  
  INNER JOIN employee s  
  ON s.ID = e.supervisorID  
ORDER BY e.ID; 

看起来您需要一个标量查询

   List<Object[]> rows = getEntityManager().createQuery(
       "select e.id, e.name, s.name "
        + " from Employee e join fetch e.supervisor s "
        + " order by e.id").getResultList();

   for ( Object[] row: rows ) {
       // Construct an instance (or whatever) with the values
       Long id = (Long) row[0];
       String eName = (String) row[1];
       String sName = (String) row[2];
   }
List rows=getEntityManager().createQuery(
选择e.id、e.name、s.name
+“从员工e加入获取e.s主管”
+“按e.id排序”).getResultList();
对于(对象[]行:行){
//用这些值构造一个实例(或任何东西)
长id=(长)行[0];
字符串eName=(字符串)行[1];
字符串sName=(字符串)行[2];
}

无需在Hibernate中编写此类SQL。我将只依赖映射不同实体的
映射。我还没有在Hibernate(包括JPA)中编写任何JoinSQL。它确实从来都不是必需的。它是如何映射的?如果您不知道如何进行查询,那么可能是您映射了错误的类。