Spring boot 使用三个实体中的方法公共抽象的查询的Spring引导联接查询验证失败

Spring boot 使用三个实体中的方法公共抽象的查询的Spring引导联接查询验证失败,spring-boot,spring-boot-jpa,Spring Boot,Spring Boot Jpa,我用的是弹簧靴。我曾经加入三个实体来获取存储库中的数据,但它显示了下面的错误 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'menuRightRepo': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Valida

我用的是弹簧靴。我曾经加入三个实体来获取存储库中的数据,但它显示了下面的错误

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
我使用了下面的代码

  • 我的第一个实体名为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
     }
    
    @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
    }
    
    @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
     }
    
     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();   
    
    }
    
  • 我的第二个实体是贝娄

    @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
     }
    
    @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
    }
    
    @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
     }
    
     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();   
    
    }
    
  • 我的第三个实体是贝娄

    @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
     }
    
    @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
    }
    
    @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
     }
    
     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();   
    
    }
    
  • 我的菜单如下

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

  • 当我在MenuRightRepo中调用GetMenuRights()时,它显示了上述错误。我没有使用任何主键和外键。代码有什么问题。请帮帮我,我已经解决了下面的问题,比如

  • 我已将我的菜单更改为

    @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
    }
    
    @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
     }
    
    @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
    
     }
    

  • 然后,我的存储库查询工作正常…我只需将三个表无条件地连接到一对多&多对一,并将列连接到可为null的false,工作正常

    我已经解决了以下问题:

  • 我已将我的菜单更改为

    @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
    }
    
    @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
     }
    
    @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
    
     }
    

  • 然后,我的存储库查询就可以正常工作了……我只是无条件地联接三个表一对多&多对一,并联接正常工作的列可为null的false

    选择新的com.rms.info。。。。。???这应该是sql,而不是java代码。如果你想使用纯JPA,你必须定义你的实体。不使用连接定义实体,您就可以使用SpringJDBC对映射的支持capabilities@Alexander.Furer我也尝试过@Query(值=“从MenuName p、MenuChild c、MenuRight m中选择m.companyId、m.userId、m.enqMode、m.insertMode、m.updateMode、m.deleteMode、p.parentId、c.childId、c.childMenuName、c.url,其中p.parentId=c.parentId和p.status=1,c.status=1和c.url=m.url”,nativeQuery=true)列表GetMenuRights();此选择的结果集未映射到您的实体。您应该使用jdbc模板和映射manually@Alexander.Furer我需要在hibernate中显示上面查询中的值,如何使用three entity?@Alexander.furr我已经按照下面的命令选择new com.rms.info…??这应该是sql,而不是java代码。如果你想使用纯JPA,您必须定义实体。如果不使用连接定义实体,您可以使用spring jdbc支持和映射capabilities@Alexander.Furer我也尝试过@Query(value=”从MenuName p、MenuChild c、MenuRight m中选择m.companyId、m.userId、m.enqMode、m.insertMode、m.updateMode、m.deleteMode、p.parentId、c.childId、c.childMenuName、c.url,其中p.parentId=c.parentId和p.status=1和c.url=m.url”,nativeQuery=true)列表GetMenuRights();此选择的结果集未映射到您的实体。您应该使用jdbc模板和映射manually@Alexander.Furer我需要在hibernate中显示上面查询中的值,如何使用三个实体?@Alexander.furr我遵循了下面的步骤