Ошибка проверки запроса Spring boot join для запроса для метода publi c abstract при использовании трех сущностей - PullRequest
1 голос
/ 20 июня 2020

Я использую пружинный ботинок. Я использовал объединение трех объектов для получения данных из репозитория, но это показывает ошибку ниже ..

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'menuRightRepo': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List...  

Caused by: java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List

Я использовал следующий код ..

  1. мой первый сущность с именем MenuNameEntity ниже

    @Entity
    @Table(name = "MenuName")
    public class MenuNameEntity {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "id")
     private long id;
    
     private String parentId;
     private String menuName;
     private String status;
     // getter and setter
     }
    
  2. моя вторая сущность ниже

    @Entity
    @Table(name = "MenuChild")
    public class MenuChildEntity {
    
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "id")
     private long id;   
     private String parentId;   
     private String childMenuName;  
     private String url;    
     private String status;
     //getter and setter
    }
    
  3. Моя третья сущность ниже

    @Entity
    @Table(name = "MenuRight")
    public class MenuRightEntity {
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      @Column(name = "id")
      private long id;
    
      private String companyId; 
      private String userId;    
      private String url;   
      private String status;    
      private String enqMode;   
      private String insertMode;    
      private String updateMode;    
      private String deleteMode;
     //getter and setter
     }
    
  4. My MenuRightRepository ниже

     public interface MenuRightRepo extends JpaRepository<MenuRightEntity, Long> {
    
      @Query("select new com.rms.info.MenuRightResponse(m.companyId, m.userId,m.enqMode,m.insertMode,m.updateMode,m.deleteMode, p.parentId,c.childId,c.childMenuName,c.url) from MenuNameEntity p,MenuChildEntity c,MenuRightEntity m where p.parentId = c.parentId  and p.status =1 and c.status =1 and c.url= m.url ")
     List<MenuRightResponse> getMenuMenuRights();   
    
    }
    
  5. Я использовал MenuRightResponse для привязки полученного значения из репозитория

      package com.rms.info;
      public class MenuRightResponse {
    
    private String companyId= "";
    private String userId= "";
    private String enqMode= "";
    private String insertMode= "";
    private String updateMode= "";
    private String deleteMode= "";
    private String parentId= "";
    private String childId= "";
    private String childMenuName= "";
    private String url= "";     
    
      public MenuRightResponse(String companyId, String userId, String enqMode, String insertMode, String updateMode,
        String deleteMode, String parentId, String childId, String childMenuName, String url) {
    super();
    this.companyId = companyId;
    this.userId = userId;
    this.enqMode = enqMode;
    this.insertMode = insertMode;
    this.updateMode = updateMode;
    this.deleteMode = deleteMode;
    this.parentId = parentId;
    this.childId = childId;
    this.childMenuName = childMenuName;
    this.url = url;
      }
    //getter and setter
     }
    

, когда я вызвал getMenuMenuRights () в MenuRightRepo , он показывает ошибку выше. Я не использовал первичный и внешний ключ. В чем проблема кода. Пожалуйста, помогите мне

1 Ответ

0 голосов
/ 02 июля 2020

Я решил проблему ниже, например ...

  1. Я изменил свой MenuNameEntity на

    @Entity
    @Table(name = "MenuName")
    public class MenuNameEntity {
    
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "id")
     private long id;
    
    private String parentId;
    private String menuName;
    private String status;
    
     @OneToMany(fetch = FetchType.LAZY, mappedBy = "MenuName")  
     private Set<MenuChildEntity> menuChildEntities;
    
    // getter and setter
    }
    
  2. Я изменил свой MenuChildEntity на

    @Entity
    @Table(name = "MenuChild")
    public class MenuChildEntity {
    
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "id")
     private long id; 
    
     @Column(name = "parentId", nullable = false,insertable = false,updatable = false) 
     private String parentId;   
     private String childMenuName;  
     private String url;    
     private String status;
    
     @OneToMany(fetch = FetchType.LAZY, mappedBy = "MenuChild") 
     private Set<MenuRightEntity> menuRightEntities;
    
     @ManyToOne
     @JoinColumn(name = "parentId")
     private MenuNameEntity MenuName;
    
     //getter and setter
     }
    
  3. Я изменил свой MenuRightEntity на

    @Entity
    @Table(name = "MenuRight")
    public class MenuRightEntity {
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "id")
     private long id;
    
     private String companyId; 
     private String userId;  
    
    @Column(name = "url", nullable = false,insertable = false,updatable = false)  
     private String url;   
     private String status;    
     private String enqMode;   
     private String insertMode;    
     private String updateMode;    
     private String deleteMode;        
    
     @ManyToOne
     @JoinColumn(name = "url")
     private MenuChildEntity MenuChild;
    
      //getter and setter
    
     }
    

Мой запрос к репозиторию тогда работает нормально ... Я просто присоединяюсь к трем безусловным таблицам один-ко-многим и многие-к-одному и присоединяю столбец обнуляемое ложное , что работает нормально

...