【发布时间】:2020-07-12 16:13:16
【问题描述】:
我正在尝试发出 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。下面的 Http 请求是我使用第一个 POST 方法的方式:
POST http://localhost:8080/api/user
Content-Type: application/json
{
"login": "a",
"userProfile": {
"name": "A"
}
}
我的请求不正确或建立了不正确的关系?
【问题讨论】:
标签: java rest jpa post one-to-one