JavaSpringJPA关系@OneToMany,内有第三列
我在java Student和Group中有两个实体具有@OneToMany关系JavaSpringJPA关系@OneToMany,内有第三列,java,spring,jpa,Java,Spring,Jpa,我在java Student和Group中有两个实体具有@OneToMany关系 public class Group { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name="name") private Integer groupName; public Group(Integer groupName) { this.groupName = groupNa
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name="name")
private Integer groupName;
public Group(Integer groupName) {
this.groupName = groupName;
}
@OneToMany
@JoinTable(name = "groups_students",
joinColumns= @JoinColumn(name = "group_id"),
inverseJoinColumns = @JoinColumn(name = "student_id")
)
private Set<Student> students;
}
处理联接表中其他属性的方法是将其定义为单独的实体,然后使用中间实体拆分关系
@Entity
@Table(name = "groups_students")
public class GroupStudent {
@Id
@ManyToOne(fetch = FetchType.LAZY)
private Group group;
@Id
@ManyToOne(fetch = FetchType.LAZY)
private Student student;
@Column(name = "date")
private Date date;
//getter-setter
}
现在修改组实体上的关系
现在,如果您想要查询诸如日期之类的附加属性,您可以使用类似这样的JPQL,例如,如果您想要获取日期在过去的组中的所有学生
@Query(SELECT s FROM Student s JOIN s.groupStudents gs WHERE gs.group = :group and gs.date < CURRENT_DATE)
好的,您尝试了什么查询?请您添加组\学生实体。您正在将其设置为多个,但试图将其作为一到多个。您可以使用本机查询并返回对象[],从对象[]可以获取所需的日期或其他字段。@emotionlessbananas感谢您的回复。代码没有此实体。它需要什么?查询是@QuerySELECT s FROM Group g join g.students s,其中g.groupName=:gName和我需要使用SELECT获取日期。在这种情况下,您需要将@JoinTable更改为@jointcolumn,并需要在学生实体内定义外键。
@OneToMany(mappedBy = "group", cascade = CascadeType.ALL)
private List<GroupStudent> groupStudents = new ArrayList<>();
@OneToMany(mappedBy = "student", cascade = CascadeType.ALL)
private List<GroupStudent> groupStudents = new ArrayList<>();
@Query(SELECT s FROM Student s JOIN s.groupStudents gs WHERE gs.group = :group and gs.date < CURRENT_DATE)