您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

可以在@ManyToMany Hibernate额外表中添加额外字段吗?

可以在@ManyToMany Hibernate额外表中添加额外字段吗?

如果在链接表(STUDENT_COURSE)上添加额外的字段,则必须根据skaffman的答案或以下所示选择其他方法

有一种方法可以根据以下条件使链接表(STUDENT_COURSE)表现为@Embeddable:

@Embeddable
public class JoinedStudentCourse {

    // Lets suppose you have added this field
    @Column(updatable=false)
    private Date joinedDate;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="STUDENT_ID", insertable=false, updatable=false)
    private Student student;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="COURSE_ID", insertable=false, updatable=false)
    private Course course;

    // getter's and setter's

    public boolean equals(Object instance) {
        if(instance == null)
            return false;

        if(!(instance instanceof JoinedStudentCourse))
            return false;

        JoinedStudentCourse other = (JoinedStudentCourse) instance;
        if(!(student.getId().equals(other.getStudent().getId()))
            return false;

        if(!(course.getId().equals(other.getCourse().getId()))
            return false;

        // ATT: use immutable fields like joinedDate in equals() implementation
        if(!(joinedDate.equals(other.getJoinedDate()))
            return false;

        return true;
    }

    public int hashcode() {
        // hashcode implementation
    }

}

因此,您将同时参加学生和课程课程

public class Student {

    @CollectionOfElements
    @JoinTable(
        table=@Table(name="STUDENT_COURSE"),
        joinColumns=@JoinColumn(name="STUDENT_ID")
    )
    private Set<JoinedStudentCourse> joined = new HashSet<JoinedStudentCourse>();

}

public class Course {

    @CollectionOfElements
    @JoinTable(
        table=@Table(name="STUDENT_COURSE"),
        joinColumns=@JoinColumn(name="COURSE_ID")
    )
    private Set<JoinedStudentCourse> joined = new HashSet<JoinedStudentCourse>();

}

请记住:@Embeddable类的生命周期绑定到拥有的实体类(Student和Course),因此请多加注意。

建议:由于@ManyToMany映射中的某些限制- 级联操作,Hibernate团队支持这两种方法(@OneToMany(skaffman的答案)或@CollectionsOfElements)。

问候,

其他 2022/1/1 18:14:54 有699人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶