I'll put it simple. I've got User class and Privilege class. User has many Privileges.
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user")
private Set<Privilege> privileges;
Privilege has one and only one User.
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private User user;
As you see I've specified CascadeType to ALL, but whenever I want to persist my User:
Set<Privilege> privs = new HashSet<>();
Privilege priv = new Privilege("anything");
//priv.setUser(user); it works with this line, of course
privs.add(priv);
user.setPrivileges(privs);
//session.save(user);
Privilege has not binded user. Any ideas?
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private Long id;
@Column(name="email", nullable = false, unique = true)
private String email;
@Column(name="password")
private String password;
@Column(name="user_type")
@Enumerated(EnumType.STRING)
private UserType userType;
@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, mappedBy = "user")
private Set<Privilege> privileges = new HashSet<>();
//getters, setters
@Entity
@Table(name = "privileges", uniqueConstraints = @UniqueConstraint(columnNames = {"user_id", "privilege"}))
public class Privilege {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "privilege")
private String privilege;
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private User user;
//getters setters