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