首页 > 解决方案 > 为什么我们需要在休眠的@OneToMany 注释侧中使用辅助方法?

问题描述

这里我有两个实体类Course和Instructor,它们遵循双向的一对多关系。源代码如下。我需要知道Instructor类中addCourse()方法的需要是什么,我们不能创建这个类没有它?

源代码。

讲师班

@Entity
@Table(name="Instructor")

public class Instructor {
    

    @Id
    @GeneratedValue(strategy =GenerationType.IDENTITY )
    @Column(name="id")
    private int id;

    @Column(name="first_name")
    private String firtName;
    
    @Column(name="last_name")
    private String lastName;
    
    @Column(name="email")
    private String email;
    
    
    
    @OneToMany(mappedBy ="instructor" ,cascade= {CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH}) 
    private List<Course> courses;


    //Getters and Setters + Constructors + toString() method

    
    public void addCourse(Course tempCourse) {//Helper method
        if(courses == null) {
            courses = new ArrayList<>();
        }
        courses.add(tempCourse);
        tempCourse.setInstructor(this);
    }

}

课程班

@Entity
@Table(name="course")
public class Course {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    
    @Column(name="title")
    private String title;
    
    @ManyToOne(cascade ={CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH} )
    @JoinColumn(name="instructor_id")
    private Instructor instructor;
    
    //Getters and Setters + Constructors + toString() method    

    
}

标签: javadatabasehibernateormnhibernate-mapping

解决方案


该方法只是检查列表是否为空,如果不存在则创建它,您可以使用以下方法将其排除在外:

@OneToMany(mappedBy ="instructor" ,
cascade= {CascadeType.DETACH,
CascadeType.MERGE,
CascadeType.PERSIST,
CascadeType.REFRESH}) 
    private List<Course> courses = new ArrayList<>();

它所做的另一件事是添加对课程的引用,以确保关系是双向的,课程引用讲师,反之亦然。

您可以将其取出并在服务方法中进行这些检查。

要回答您的问题,您可以在没有它的情况下制作相同的课程,但您必须在其他地方做这些事情,这种设计有效,但它的设计很糟糕,addCourse应该是一种服务方法,把它放在那里会让您成为 pojo 实体有逻辑有控制力的东西,但方法的逻辑是对的。


推荐阅读