novato
novato

Reputation: 27

Spring oneToOne relationship not setting FK when saving

this is my code:

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;

    private String password;

    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = false)
    private Employee employee;

    public User() {
    }

    //SETTERS AND GETER
    
}

@Entity
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "user_id")
    private User user;

    public Employee() {
    }
    
    //SETTERS AND GETER

}

On my service I'm trying somthing like this:

    User user = new User();
    user.setUsername("my_username");
    user.setPassword("12345");

    Employee employee = new Employee();
    employee.setName("My Name");
    employee.setBirth(LocalDate.now());

    user.setEmployee(employee);

    userService.save(user);

There Are no errors nor any problem on the application, but looking on my database, the user_id column is empty, what is for me to do to have user_id set automatically with User id? Thanks in advance!

Upvotes: 2

Views: 56

Answers (1)

SternK
SternK

Reputation: 13041

As it is stated in the hibernate documentation:

Whenever a bidirectional association is formed, the application developer must make sure both sides are in-sync at all times.

You use bidirectional @OneToOne so, you should synchronize both side of the association:

User user = new User();
user.setUsername("my_username");
user.setPassword("12345");

Employee employee = new Employee();
employee.setName("My Name");
employee.setBirth(LocalDate.now());

// make both side  of bidirectional @OneToOne in-sync
user.setEmployee(employee);
employee.setUser(user);

userService.save(user);

Upvotes: 1

Related Questions