一对一关系的方法 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);
在保存到存储库之前的第一种方法中。
我正在尝试使用 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);
在保存到存储库之前的第一种方法中。