如何在 JPA 中映射复合主键

问题描述 投票:0回答:1
@Table(name = "student")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private long id;
    @Column(name = "roll_no", nullable = false)
    private long rollNo;
    @Column(name = "enrollment_no", nullable = false, unique = true)
    private String enrollmentNo;
}


   @Entity
   @Table(name = "subject")
   public class Subject {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private long id;

    @Column(name = "subject_code", nullable = false, unique = true)
    private String code;// course code
}

我有以上两门课。 我想为下面的数据库表创建一个 StudentMarks 类 Student_marks(student_id,marks_id,marks,passing_status);

我试过这个

@Embeddable
public class StudentMarksId implements Serializable {

    private Long studentId;
    private Long subjected;
     //getter and setter
}

@Entity
@Table(name = "student_marks")
public class StudentMarks implements Serializable {

    private static final long serialVersionUID = 4428298147790767663L;

    @EmbeddedId
    @Id
    @JoinColumns({ 
        @JoinColumn(name = "subject_id", referencedColumnName = "id"),
            @JoinColumn(name = "student_id", referencedColumnName = "id") })
    private StudentMarksId id;

    
    private List<Subject> subjects;
    private List<Student> students;

    @Column(name = "marks", nullable = false)
    private int marks;

    @Column(name = "passing_status", nullable = false)
    private String passingStatus;// pass or fail
 }```

I want to map student and subjects to student_marks.
jpa mapping one-to-many
1个回答
0
投票

有几种方法可以绘制此图。一是:

public class StudentMarksId implements Serializable {
    private Long studentId;
    private Long subjected;
     //getter and setter
}

@Entity
@Table(name = "student_marks")
@IdClass(StudentMarksId.class)
public class StudentMarks implements Serializable {
    private static final long serialVersionUID = 4428298147790767663L;
    @Id
    @ManyToOne
    @JoinColumn(name = "subject_id", referencedColumnName = "id")
    private Subject subject;

    @Id
    @ManyToOne
    @JoinColumn(name = "student_id", referencedColumnName = "id")
    private Student student;

    @Column(name = "marks", nullable = false)
    private int marks;

    @Column(name = "passing_status", nullable = false)
    private String passingStatus;// pass or fail
}

另一种可能是将 StudentMarksId 映射为实体中的可嵌入项:

@Embeddable
public class StudentMarksId implements Serializable {
    private Long studentId;
    private Long subjected;
     //getter and setter
}

@Entity
@Table(name = "student_marks")
@IdClass(StudentMarksId.class)
public class StudentMarks implements Serializable {
    private static final long serialVersionUID = 4428298147790767663L;

    @EmbeddedId
    private StudentMarksId id;

    @MapsId("subjected")
    @ManyToOne
    @JoinColumn(name = "subject_id", referencedColumnName = "id")
    private Subject subjects;

    @MapsId("studentId")
    @ManyToOne
    @JoinColumn(name = "student_id", referencedColumnName = "id")
    private Student student;

    @Column(name = "marks", nullable = false)
    private int marks;

    @Column(name = "passing_status", nullable = false)
    private String passingStatus;// pass or fail
}
© www.soinside.com 2019 - 2024. All rights reserved.