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
我使用了下面的代码
@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我遵循了下面的步骤