【发布时间】:2020-08-18 22:51:41
【问题描述】:
我有两个实体如下:
用户实体
@Entity
@Table(name = "user")
@Getter
@Setter
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id")
private UserDetails userDetails;
@Column(name = "description")
private String description;
public User(final String description) {
this.description = description;
}
}
UserDetails 实体
@Entity
@Table(name = "user_details")
@Getter
@Setter
@NoArgsConstructor
public class UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "description")
private String description;
@OneToOne(mappedBy = "userDetails")
private User user;
public UserDetails(final String description) {
this.description = description;
}
}
我的flyway脚本如下:
CREATE TABLE `user` (
`id` int PRIMARY KEY AUTO_INCREMENT,
`description` varchar(255)
);
CREATE TABLE `user_details` (
`id` int PRIMARY KEY AUTO_INCREMENT,
`user_id` int,
`description` varchar(255)
);
ALTER TABLE `user_details` ADD FOREIGN KEY (`user_id`) REFERENCES `user` (`id`);
当我启动应用程序时,表格创建得很好。我希望 user 表是父表,而 user_details 表是子表,它被创建得非常好。但是当我在数据库中插入一个用户时,user_details 表中的 user_id 列被存储为空。下面是我的控制器。
用户控制器
@RestController
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/users/{id}")
public ResponseEntity < User > getUser(@PathVariable("id") Long id) {
User user = userRepository.getOne(id);
return new ResponseEntity < > (user, HttpStatus.OK);
}
@PostMapping("/users")
public ResponseEntity < User > saveUser(@Valid @RequestBody User user) {
User userSaved = userRepository.save(user);
return new ResponseEntity < > (userSaved, HttpStatus.OK);
}
}
用户存储库
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
为什么 user_details 表中的 user_id 列被存储为空?
下面是我的卷发:
curl - X POST\
http: //localhost:5000/users \
-H 'Cache-Control: no-cache'\ -
H 'Content-Type: application/json'\ -
H 'Postman-Token: 22a98f2b-d3cc-4127-b3ad-35f28c916fa4'\ -
d '{
"description": "Some user",
"userDetails": {
"description": "Some user details"
}
}
【问题讨论】:
标签: spring-boot hibernate jpa one-to-one