首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要获得期望加入的org.hibernate.hql.internal.ast.QuerySyntaxException:路径!连接3个表时

为什么要获得期望加入的org.hibernate.hql.internal.ast.QuerySyntaxException:路径!连接3个表时
EN

Stack Overflow用户
提问于 2019-02-15 08:40:52
回答 1查看 1.3K关注 0票数 0

我有三个实体basicInfo,性别和部门。如果我加入了basicInfo和性别模型,那么它可以正常工作,但是当我想和其他两个实体同时加入部门时,就会显示出来。

.QuerySyntaxException:期望加入的路径!

我的三个实体类,

代码语言:javascript
复制
@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
 }

性别模型

代码语言:javascript
复制
 @Entity
 @Table(name = "gender")
 public class GenderModel implements Serializable {
 @Id
 @Column(name = "id")
 private char id;

 @Column(name = "name")
 private String name;
 //getter setter
}

与部门模型

代码语言:javascript
复制
   @Entity
   @Table(name = "department")
   public class DepartmentModel {
   @Id private int id;
   private String name;
   //getter setter
}

我的Dto类

代码语言:javascript
复制
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
  }

我的存储库类如下所示:

代码语言:javascript
复制
@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();
}

,最后,我得到了这个错误

由: org.hibernate.hql.internal.ast.QuerySyntaxException:路径引起的: java.lang.IllegalArgumentException:期望加入!选择新的com.employeeAttendance.employeeAttendance.dto.BasicInfoDto ( a.sexId,b.name,a.department,从com.employeeAttendance.employeeAttendance.model.BasicInfoModel a内部连接com.employeeAttendance.employeeAttendance.model.GenderModel b on a.sexId = b.id内连接DepartmentMode c on a.department = c.id at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138) ~hibernate-5.3.7.final.jar:5.3.7 INNER at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) ~hibernate-core-5org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188) ~hibernate处的.3.7.Final.jar:5.3.7.Final -core-5.3.7.Final.jar:5.3.7.Final.jar在org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:713) ~hibernate-core-5.3.7.Final.jar:5.3.7.Final.jar在org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23) ~hibernate-core-5.3.7.final.jar:5.3.7.Final.jar: sun.reflect.NativeMethodAccessorImpl.invoke0(Native方法完成) ~na:1.8.0_191 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~na:1.8.0_191 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~na:1.8.0_191 at java.lang.reflect.Methodorg.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:350) ~ .invoke(Method.java:498) ~na:1.8.0_191 at .invoke~spring-orm-5.1.4 RELEASE.jar:5.1.4.RELEASE at com.sun.agent。$Proxy109.createQuery(未知来源) ~na:na at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:87) ~spring-data-jpa-2。1.4.RELEASE.jar:2.1.4.RELEASE .由于: org.hibernate.hql.internal.ast.QuerySyntaxException:路径预期会加入而忽略了76个常见帧!选择新的com.employeeAttendance.employeeAttendance.dto.BasicInfoDto ( a.sexId,b.name,a.department,从com.employeeAttendance.employeeAttendance.model.BasicInfoModel a内部连接com.employeeAttendance.employeeAttendance.model.GenderModel b on a.sexId = b.id内部连接DepartmentMode c on a.department = c.id at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~hibernate-核心-5.3.7.Final.jar:5.3.7#en3# at org.hibernate.hql.internal.ast.ErrorTracker.throwQueryException(ErrorTracker.java:93) ~hibernate-core-5.3.7.final.jar:5.3.7.Final.jar在org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:277) ~hibernate-core-5.3.7.final.jar:5.3.7.final.jar:5.3.7.Final.jar在org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:191) ~hibernate-核心-5.3.7.Final.jar:5.3.7.final.jar:5.3.7.final.jar在org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:143) ~hibernate-core- 5.3.7.final.jar:5.3.7.Final.jar在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:119) ~hibernate-核心-5.3.7.Final.jar:5.3.7.Final.jar在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:80) ~hibernate-core5.3.7.Final.jar:5.3.7.Final在org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153) ~hibernate-core-5.3.7.Final.jar:5.3.7.Final.jar在org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:595) ~hibernate-core-5.3.7.Final.jar:5.3.7在org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:704) ~hibernate-core-5.3.7.Final.jar:5.3.7.Final.jar.84个常见帧被省略

但是,如果我删除了第二次与部门的连接,那么它就能正常工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-15 08:45:24

您正在处理jpql中的实体属性,而不是表。因此,您只告诉jpql要使用哪个属性来连接:

代码语言:javascript
复制
"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";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54705408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档