一对一关系的方法 POST

Method POST for One To One relation

我正在尝试使用 UserProfile 发出 POST 保存 User 的请求,但出现错误。

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String login;

    @OneToOne(fetch = FetchType.LAZY, cascade =  CascadeType.ALL, mappedBy = "user")
    private UserProfile userProfile;
}

@Entity
@Table(name = "user_profile")
public class UserProfile {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

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

这两个POST方法有区别吗?

@RestController
@RequestMapping("/api/user")
public class UserController {
    @PostMapping
    public User save(@RequestBody User user) {
        return userRepository.save(user);
    }

    @PostMapping("/anotherSave")
    public User anotherSave() {
        User user = new User();
        user.setLogin("Login");

        UserProfile userProfile = new UserProfile();
        userProfile.setName("Name");

        user.setUserProfile(userProfile);
        userProfile.setUser(user);

        return userRepository.save(user);
    }
}

第二个完美无误。第一个抛出异常 Column 'user_id' cannot be null。下面的 Http 请求是我如何使用第一个 POST 方法:

POST http://localhost:8080/api/user
Content-Type: application/json

{
  "login": "a",
  "userProfile": {
    "name": "A"
  }
}

我的请求不正确或建立关系不正确?

您在 JSON 请求正文中忽略了 UserProfile.user,所以我想您可以添加类似

的内容
user.getUserProfile().setUser(user);

在保存到存储库之前的第一种方法中。