Я только что нашел пример отношения @ManyToMany Hibernate на github, который заставил меня задуматься, как правильно его реализовать.Позвольте мне объяснить лучше.Вариант использования очень прост: у меня есть пользователь, который может иметь одну или несколько ролей.Изначально я думал, что это отношение между многими, но я нашел этот пример, который меня сильно смущает:
Users.java class
@Entity
@Table(name = "user")
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private int id;
@Column(name = "email")
private String email;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
public Users() {
}
public Users(Users users) {
this.email = users.getEmail();
this.roles = users.getRoles();
this.id = users.getId();
}
`// getters and setters
Role.java class
@Entity
@Table(name = "role")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "role_id")
private int roleId;
@Column(name = "role")
private String role;
public Role() {
}
// getters and setters
Во-первых, он использует отношение OneToMany (и я не могу объяснить почему), а во-вторых, он не имеет ссылки на Users внутри класса Role.Кто-то знает почему и может мне это объяснить?Я бы пошел с отношениями ManyToMany, и я бы поместил Набор пользователей также в Role с аннотацией @ManyToMany. Здесь ссылка на git repo .