Я пытаюсь сделать POST-запрос для сохранения User
с UserProfile
, но получаю сообщение об ошибке.
@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
. Ниже показано, как я использую первый метод POST в HTTP-запросе:
POST http://localhost:8080/api/user
Content-Type: application/json
{
"login": "a",
"userProfile": {
"name": "A"
}
}
Мой запрос неверен или неправильно построена связь?