如何使用 Spring 数据 JPA 显示来自多个表的数据 - 多对多关系
How to display data from multiple tables using Spring data JPA - many to many relation
我正在尝试从 Spring Data JPA 中的多个 table 获取数据。
我有:
Professor.java
@Entity
public class Professor {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
private String username;
private String password;
private String firstname;
private String lastname;
//Generated getters and setters
@ManyToMany(mappedBy = "professors", fetch = FetchType.EAGER, cascade = { CascadeType.MERGE, CascadeType.PERSIST })
private List<Classes> classes;
Classes.java
@Entity
public class Classes {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
private String name;
@Lob
private String description;
@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.MERGE, CascadeType.PERSIST })
private List<Professor> professors;
这些实体生成名为 'classes_professor' 的 table 和如下字段 classes_id 和 professor_id
我正在尝试显示教授的一些 ID,这些 ID 已被赋予 class 一些 ID。
ClassesRepository.java
@Repository
public interface ClassesRepository extends CrudRepository<Classes,Long>{
@Query("SELECT p FROM Professor p join p.Classes c WHERE c.id =:id")
public List<Professor> findProfessorNameById(@Param("id") long id);
}
Controller.java
public List<Professor> findProfessorNameById(@Param("id") long id){
return classesRepository.findProfessorNameById(id);
}
当我尝试 运行 时,我遇到了这个错误:
could not resolve property: Classes of: com.oggi.model.Professor [SELECT p FROM com.oggi.model.Professor p join p.Classes c WHERE c.id =:id]
错误在p.Classes。它应该是 p.classes 因为你的 Professor POJO 中的属性是小写的。
Query检查了Professor POJO/Entity的属性;它不会寻找其他实体名称。
置顶:
有时你写 "profesor" 其他时候 "professor".
我正在尝试从 Spring Data JPA 中的多个 table 获取数据。
我有:
Professor.java
@Entity
public class Professor {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
private String username;
private String password;
private String firstname;
private String lastname;
//Generated getters and setters
@ManyToMany(mappedBy = "professors", fetch = FetchType.EAGER, cascade = { CascadeType.MERGE, CascadeType.PERSIST })
private List<Classes> classes;
Classes.java
@Entity
public class Classes {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
private String name;
@Lob
private String description;
@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.MERGE, CascadeType.PERSIST })
private List<Professor> professors;
这些实体生成名为 'classes_professor' 的 table 和如下字段 classes_id 和 professor_id
我正在尝试显示教授的一些 ID,这些 ID 已被赋予 class 一些 ID。
ClassesRepository.java
@Repository
public interface ClassesRepository extends CrudRepository<Classes,Long>{
@Query("SELECT p FROM Professor p join p.Classes c WHERE c.id =:id")
public List<Professor> findProfessorNameById(@Param("id") long id);
}
Controller.java
public List<Professor> findProfessorNameById(@Param("id") long id){
return classesRepository.findProfessorNameById(id);
}
当我尝试 运行 时,我遇到了这个错误:
could not resolve property: Classes of: com.oggi.model.Professor [SELECT p FROM com.oggi.model.Professor p join p.Classes c WHERE c.id =:id]
错误在p.Classes。它应该是 p.classes 因为你的 Professor POJO 中的属性是小写的。
Query检查了Professor POJO/Entity的属性;它不会寻找其他实体名称。
置顶: 有时你写 "profesor" 其他时候 "professor".