'joinColumns in Hibernate for standard relations?
In the following example, there are 3 entities which have relations e.g. @ManyToMany, @OneToMany and @ManyToOne:
Student:
@Entity
@Data
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
private String name;
@JsonIgnore
@ManyToMany(mappedBy = "students")
private Set<Subject> subjects = new HashSet<>();
}
Subject:
@Entity
@Data
public class Subject {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
private String name;
@ManyToMany
@JoinTable(
name = "subject_student",
joinColumns = @JoinColumn(name = "subject_id"),
inverseJoinColumns = @JoinColumn(name = "student_id")
)
Set<Student> students = new HashSet<>();
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "teacher_id", referencedColumnName = "id")
private Teacher teacher;
}
Teacher:
@Entity
@Data
public class Teacher {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@JsonIgnore
@OneToMany(mappedBy = "teacher")
private Set<Subject> subjects;
}
1. In the subject entity, I tried to remove @JoinColumn
and the related entities are connected as the example above:
@ManyToMany
@JoinTable(name="subject_student")
public Set<Student> students = new HashSet<>();
@ManyToOne(cascade = CascadeType.ALL)
private Teacher teacher;
So, if we want to use subject_id
- student_id
pair in subject_student
table and use teacher_id
in subject table as it is created in the example, can I use my simplified notation by removing @JoinColumn
? Because, if there is not a special case, I think it is redundant to verbose notation of relations.
2. When I use the second approach, the columns are created as plural e.g. subjects_id
- students_id
in subject_student
. So, can I prevent this and create them as in the previous example by using my approach?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|