gpt4 book ai didi

Java Spring JPA 关系 @OneToMany 与第三列

转载 作者:行者123 更新时间:2023-12-02 09:14:54 26 4
gpt4 key购买 nike

我在 java 中有两个实体(学生和组),具有 @OneToMany 关系

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

我在本地主机上的表groups_students 中有第三列datedate 不是类中的字段。我需要在 @Query 中获取它。任何人都可以帮助我如何获得此信息(也许向代码提供有关此日期列的信息或任何其他方式)

public class Student {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Column(name="first_name")
private String firstName;

@Column(name="last_name")
private String lastName;

public Student(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}

最佳答案

处理连接表中的附加属性的方法是将其定义为单独的实体,然后使用中间实体拆分关系

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

现在修改Group实体上的关系

@OneToMany(mappedBy = "group", cascade = CascadeType.ALL)
private List<GroupStudent> groupStudents = new ArrayList<>();

并修改Student实体关系

@OneToMany(mappedBy = "student", cascade = CascadeType.ALL)
private List<GroupStudent> groupStudents = new ArrayList<>();

现在,如果您想查询诸如日期之类的附加属性,您可以使用这样的JPQL(例如,如果您想获取日期为过去日期的组中的所有学生) )

@Query(SELECT s FROM Student s JOIN s.groupStudents gs WHERE gs.group = :group and gs.date < CURRENT_DATE)

关于Java Spring JPA 关系 @OneToMany 与第三列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59081680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com