Java jpa hibernate映射joincolumn对象中的最新对象

Java jpa hibernate映射joincolumn对象中的最新对象,java,hibernate,jpa,Java,Hibernate,Jpa,我有学生和活动表 我想参加学生实体的最新活动,有人能帮我吗 Student ------- id name latest_activity_id student_ctivities -------- id, name insertDate @Entity public class Student{ String id; String name; @JoinColumn(

我有学生和活动表

我想参加学生实体的最新活动,有人能帮我吗

    Student
    -------
    id
    name
    latest_activity_id

    student_ctivities
    --------
    id,
    name
    insertDate

    @Entity
    public class Student{

    String id;
    String name;

    @JoinColumn(name = "latest_activity_id")
    // how do map latest activity (sort by insert date) to following object
    StudentActivity activity;


    }

@Entity
public class StudentActivity{
Integer id;
String name;
LocalDate insertDate;
}

一种选择是在学生和学生积极性之间建立两种关系。一个是一对多(学生有许多学生活动),另一个是映射最新学生(一对一)

因此,在学生中:

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "student")
private Set<StudentActivity> activitys = new LinkedHashSet<>();

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_current_activity", referencedColumnName = "id")
private StudentActivity currentActivity;
这是我通常的做法,它确实创造了一个关系,但它解决了问题。我想您也可以使用有序集合,或者每次需要获取最新活动时,都可以使用基于最新项返回的SQL查询。您还需要在StudentActivity中再创建一个列/属性


希望有帮助。

学生活动表没有学生id。因此,在您的示例中,学生活动关系不起作用。如果关系是学生有许多学生活动,那么学生活动是关系的薄弱部分,必须有学生id。但在JPA中,您可以在不使用foring键的情况下使用java属性,因为它知道关系并将相应地使用属性。
@ManyToOne
@JoinColumn(name = "id_Student", referencedColumnName = "id", nullable = false)
private Student student;