Many To Many Relationship
User.java
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "username", nullable = false, unique = true)
private String username;
@Column(name = "password", nullable = false)
private String password;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "user_roles",
joinColumns = { @JoinColumn(name = "user_id") },
inverseJoinColumns = { @JoinColumn(name = "role_id") }
)
private List<Role> roles;
}
Role.java
@Entity
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToMany(mappedBy = "roles")
private List<User> userId;
@Column(name = "role_name", nullable = false)
private String roleName;
}
One To Many Relationship
User.java
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "username", nullable = false, unique = true)
private String username;
@Column(name = "password", nullable = false)
private String password;
@OneToMany(mappedBy = "userId", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Role> roles;
}
Role.java
@Entity
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id", referencedColumnName = "id", nullable = false)
private User userId;
@Column(name = "role_name", nullable = false)
private String roleName;
}
In the case of @OneToMany I would have to create unique Role entities for each User even if identical Role entities exist. However, I could easily delete any Role entities using orphanRemoval = true
.
But if I use @ManyToMany I would not have many identical Role entities for each user (such as: USER, USER, USER, ADMIN, ADMIN). However, I couldn’t use orphanRemoval.
What is the most common type of relationship between Users and their Roles (permissions)?