Зачем получать org.hibernate.hql.internal.ast.QuerySyntaxException: путь, ожидаемый для соединения!при объединении 3 столов - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть три объекта basicInfo, пол и отдел.Если я присоединяюсь с basicInfo и гендерной моделью, тогда она работает нормально, но когда вы хотите присоединиться к отделу вместе с двумя другими объектами одновременно, тогда отображается

.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();
}

И, наконец, я получаю эту ошибку

Причина: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Путь, ожидаемый для соединения![ВЫБЕРИТЕ новый com.employeeAttendance.employeeAttendance.dto.BasicInfoDto (a.sexId, b.name, a.department, c.name) ОТGenderModel b в a.sexId = b.id ВНУТРЕННЕЕ СОЕДИНЕНИЕ Подразделение c в a.department = c.id] в org.hibernate.internal.ExceptionConverterImpl.convert (ExceptionConverterImpl.java:138) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.internal.ExceptionConverterImpl.convert (ExceptionConverterImpl.java:181) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.internal.ExceptionConverterImpl.convert (ExceptionConverterImpl.java:188) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.internal.AbstractSharedSessionContract.createQuery (AbstractSharedSavaC7).) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.internal.AbstractSessionImpl.createQuery (AbstractSessionImpl.java:23) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: 1.8.0_191] в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) ~ [na:.0_191] at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) ~ [na: 1.8.0_191] at java.lang.reflect.Method.invoke (Method.java:498) ~ [na: 1.8.0_1] at org.springframework.orm.jpa.ExtendedEntityManagerCreator $ ExtendedEntityManagerInvocationHandler.invoke (ExtendedEntityManagerCreator.java:350) ~ [spring-orm-5.1.4.RELEASE.jar: 5.1.4.RELEASE] в com.sun.pro.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] ... пропущено 76 общих фреймов.[ВЫБЕРИТЕ новый com.employeeAttendance.employeeAttendance.dto.BasicInfoDto (a.sexId, b.name, a.department, c.name) ОТGenderModel b в a.sexId = b.id ВНУТРЕННЕЕ РЕШЕНИЕ DepartmentMode c в a.department = c.id] в org.hibernate.hql.internal.ast.QuerySyntaxException.convert (QuerySyntaxException.java:74) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] at org.hibernate.hql.internal.ast.ErrorTracker.throwQueryException (ErrorTracker.java:93) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze (QueryTranslatorImpl.java:277) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile (QueryTranslatorImpl.java:191) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile (QueryTranslatorImpl.java:143) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] at org.hibernate.engine.query.spi.HQLQueryPlan. (HQLQueryPlan.java:119)~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.engine.query.spi.HQLQueryPlan. (HQLQueryPlan.java:80) ~ [hibernate-core-5.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] at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan (AbstractSharedSessionContract.java:595) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.internal.AbstractSharedSessionContery.ontargeContract.ont.java: 704) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] ... 84 общих кадра пропущено

Однако, если я удаляю 2-е объединение с отделомтогда все работает нормально.

1 Ответ

0 голосов
/ 15 февраля 2019

Вы работаете со свойствами сущностей в 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...