当前位置: 首页 > 知识库问答 >
问题:

为什么要获取org.hibernate.hql.internal.ast.QuerySyntaxException:需要连接的路径!连接3个表时

裴金鑫
2023-03-14

我有三个实体基本信息,性别和部门。如果我加入了basicInfo和gender模型,那么它工作得很好,但是当我想加入department和其他两个实体时,就会显示

.QuerySyntaxException:需要连接的路径!

@Entity
@Table(name = "employeebasicinfo")
public class BasicInfoModel {
@Id private String employeeId;
@NotBlank private String firstName;
@NotBlank private String lastName;
@NotNull private Integer companyId;
@Transient private String companyName;
private String phoneNo;

@Column(name = "sex")
private char sexId;

@Transient private String sexName;

@Temporal(TemporalType.TIMESTAMP)
private Date birthDate;

@Temporal(TemporalType.TIMESTAMP)
private Date joiningDate;

@NotNull private Integer department;
@Transient private String departmentName;

@ManyToOne()
@JoinColumn(name = "sex", referencedColumnName = "id", insertable = false, updatable = false)
private GenderModel genderModel;

@ManyToOne
@JoinColumn(
  name = "department",
  referencedColumnName = "id",
  insertable = false,
  updatable = false)
private DepartmentModel departmentModel;
// getter setter
 }
 @Entity
 @Table(name = "gender")
 public class GenderModel implements Serializable {
 @Id
 @Column(name = "id")
 private char id;

 @Column(name = "name")
 private String name;
 //getter setter
}
   @Entity
   @Table(name = "department")
   public class DepartmentModel {
   @Id private int id;
   private String name;
   //getter setter
}

我的Dto类

public class BasicInfoDto {
  private String employeeId;
  private String firstName;
  private String lastName;
  private Integer companyId;
  private String companyName;
  private String phoneNo;
  private char sexId;
  private String sexName;
  private Date birthDate;
  private Date joiningDate;
  private Integer department;
  private String departmentName;


  public BasicInfoDto(char sexId, String sexName, int department, String departmentName) {
    this.sexId = sexId;
    this.sexName = sexName;
    this.department = department;
    this.departmentName = departmentName;

   //getter setter
  }

下面是我的存储库类:

@Repository
public interface BasicInfoRepository extends JpaRepository<BasicInfoModel, String> {


  @Query(
      value =
          "SELECT  new com.employeeAttendance.employeeAttendance.dto.BasicInfoDto ("
              + " a.sexId, b.name, a.department,c.name) FROM "
              + " BasicInfoModel a INNER JOIN GenderModel b on a.sexId = b.id" +
                   " INNER JOIN DepartmentMode c on a.department = c.id")
  List<BasicInfoDto> getBasicInfoList();
}

最后我得到了这个错误

共有1个答案

鱼恩
2023-03-14

您正在处理jpql中的实体属性,而不是表。所以您只告诉jpql使用哪个属性来加入:

"SELECT  new com.employeeAttendance.employeeAttendance.dto.BasicInfoDto ("
  + " a.sexId, b.name, a.department,c.name) FROM "
  + " BasicInfoModel a INNER JOIN a.genderModel b "
  + " INNER JOIN a.departmentModel c";
 类似资料:
  • 问题内容: 使用JDBC连接池工具(如DBCP或c3p0)有什么好处? 如果只有 一个* 用户的 小型CRUD 应用程序,我们是否可以将 一个 连接会话创建为一个 单例 ? * PS :我正在构建一个带有小型数据库(5个表)的小型后端应用程序。 问题答案: 从Jon Skeet的答案到连接和语句池的好处是什么?: 创建到数据库服务器的网络连接是(相对)昂贵的。同样,要求服务器准备SQL语句(相对)

  • 我读过PingFederate的文档,上面写着: SP适配器用于为用户创建本地应用程序会话,以便PingFederate提供对您的应用程序或其他受保护资源的SSO访问。为了建立到IdP伙伴的连接,您必须至少配置一个SP适配器实例。您还可以配置多个适配器实例(基于一个或多个适配器),以满足您的IdP合作伙伴的不同需求。 但我不明白为什么IdP连接需要SP适配器?为什么需要它?它真正做什么? 在我的用

  • 问题内容: 我正在使用pyqt5,并且有几种使用类似于以下代码的方法连接: 例如,其中: 此代码似乎在多个方案中干净利落地工作,而没有装饰用或做什么特别的吧。 我的问题是: 通过这种方式我会失去什么? 需要什么原因? 问题答案: 的主要目的是允许定义插槽的几个不同的重载,每个重载都具有不同的签名。进行跨线程连接时,有时也可能需要使用它)。但是,这些用例相对较少,并且在大多数PyQt应用中根本不需要

  • 我正在尝试按照本教程实现nodejs mysql数据库。我知道 查询()是Pool.GetConnection()+Connection.Query()+Connection.Release()的快捷方式。 在本文中,数据库配置为: 这是可以用作: 但是,我真的不明白 如果使用pool会自动释放连接,为什么我们需要这样做呢?

  • IntelliJ中的什么功能作为服务器来接受传入连接? 当第一次运行Intellij2017.1.1时,我会得到一个对话框,要求允许传入网络连接。 您希望应用程序“Java”接受传入的网络连接吗? null 这个问题不是关于消息的来源。源码是Apple macOS应用程序级防火墙。您可以允许或阻止应用程序侦听传入的网络连接。允许这样做是一个安全风险。 IntelliJ要求被添加到允许监听传入消息的

  • 这里我的问题是在关闭连接对象时,在以下情况下会出现什么问题。 > 假设没有发生异常,在try块中它会自动关闭连接对象。 如果发生某些异常,它将转到catch块,在那里它将自动关闭连接对象。 关闭finally块中的连接对象。 注意:请不要说最后块中关闭连接对象很好。我知道那个。如果我在try块中保持关闭连接,接球块是否有任何问题请解释。