Зачем нам нужен вспомогательный метод внутри аннотированной стороны @OneToMany в спящем режиме? - PullRequest
0 голосов
/ 06 августа 2020

Здесь у меня есть два класса сущностей, называемые Course и Instructor, которые следуют двунаправленным отношениям один-ко-многим. Исходный код приведен ниже. Мне нужно знать, *1001* что нужен метод addCourse () в классе Instructor и Разве мы не создадим класс без него?

Исходный код.

Инструкторский класс

@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    

    
}

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Метод просто проверяет, является ли список нулевым, и создает его, если его там нет, вы можете оставить это, используя:

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

Другая вещь, которую он делает, это добавляет ссылку на курс, который гарантирует отношение является двунаправленным, когда курс ссылается на инструктора, и наоборот.

вы можете извлечь это и выполнить эти проверки с помощью метода обслуживания.

чтобы ответить на ваш вопрос, вы можете сделать то же самое class без него, но вам придется делать эти вещи где-то в другом месте, этот дизайн работает, но это плохой дизайн, addCourse должен быть сервисным методом, размещение его там заставляет вас pojo entity что-то, что имеет logi c и контроль, но лог c метода правильный.

0 голосов
/ 06 августа 2020

Нет необходимости иметь этот метод. Вместо этого это удобный метод, который позволяет быстро добавлять курс в List<Course> курсов, принадлежащих объекту-инструктору. 1004 * в список курсов, а также установить объект Instructor как переданный в Course объект.

Вы вполне можете заменить этот метод следующим кодом и по-прежнему достичь тех же результатов:

public class Instructor {

// misc stuff here

Set<Course> courses = new HashSet<>();
//standard getters/setters

}

И затем желаемую точку вызова, которую вы можете просто сделать:

Course course = new Course();
course.setTitle("My Title");
course.setIntructor(instructor);

instructor.getCourses().add(course);

То, что делает вышеупомянутый, по сути, то, что делает ваш метод, за исключением того, что он не инициализирует объект списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...