【问题标题】:Spring oneToOne relationship not setting FK when savingSpring oneToOne 关系在保存时未设置 FK
【发布时间】:2021-03-31 14:41:55
【问题描述】:

这是我的代码:

@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

}

在我的服务中,我正在尝试这样的事情:

    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);

应用程序没有错误也没有任何问题,但是查看我的数据库,user_id 列是空的,我该怎么做才能让 user_id 自动设置为 User id?提前致谢!

【问题讨论】:

  • 您的代码应该可以工作。您确定您的数据库 ID 设置为自动递增(或顺序)吗?

标签: java spring spring-boot hibernate jpa


【解决方案1】:

正如休眠中所说的documentation

每当形成双向关联时,应用程序开发人员必须确保双方始终保持同步。

您使用双向@OneToOne,因此,您应该同步关联的双方:

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2011-01-21
    • 2021-06-04
    • 1970-01-01
    • 2019-06-13
    相关资源
    最近更新 更多