我是spring jpa的新手,学习实体关系OneToOne双向
我创造了这两个实体
Account.java
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder
@Entity
@Table(name = "account")
public class Account {
@Id
private int id;
private String password;
@OneToOne(cascade = CascadeType.ALL)
private Employee employee;
}
字符串
Employee.java
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder
@Entity
@Table(name = "employee")
public class Employee {
@Id
private int id;
private String name;
private String email;
@OneToOne(cascade = CascadeType.ALL,mappedBy = "employee")
@JsonBackReference
private Account account;
}
型
保存帐户实体的帐户服务
public ResponseEntity<?> addAccount( Account account) {
try {
Account response = accountDAO.save(account);
if (response != null) {
return ResponseEntity.status(HttpStatus.CREATED).body(response);
} else {
return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).build();
}
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
型
在员工服务中保存员工时
private ResponseEntity<?> addEmployee(Employee employee) {
try {
Employee response = employeeDAO.save(employee);
if (response != null) {
return ResponseEntity.status(HttpStatus.CREATED).body(response);
} else {
return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).build();
}
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
型
当我用下面的json添加帐户时,我可以在帐户中添加员工及其引用
{
"id": 1001,
"password": "Amit47@123",
"employee": {
"id": 1,
"name": "Amit Kumar",
"email": "Amit@Naskay.in"
}
}
型
在数据库中检查
mysql> select * from account;
+------+------------+-------------+
| id | password | employee_id |
+------+------------+-------------+
| 1001 | Amit47@123 | 1 |
+------+------------+-------------+
1 row in set (0.00 sec)
mysql> select * from employee;
+----+----------------+------------+
| id | email | name |
+----+----------------+------------+
| 1 | Amit@Naskay.in | Amit Kumar |
+----+----------------+------------+
1 row in set (0.00 sec)
mysql>
型
但是当我尝试在下面添加Employee时
{
"id": 2,
"name": "Amit Kumar",
"email": "Amit@Naskay.in",
"account":{
"id": 1002,
"password": "Amit47@123"
}
}
型
并在数据库中登记
mysql> select * from account;
+------+------------+-------------+
| id | password | employee_id |
+------+------------+-------------+
| 1001 | Amit47@123 | 1 |
| 1002 | Amit47@123 | NULL |
+------+------------+-------------+
2 rows in set (0.00 sec)
mysql> select * from employee;
+----+----------------+------------+
| id | email | name |
+----+----------------+------------+
| 1 | Amit@Naskay.in | Amit Kumar |
| 2 | Amit@Naskay.in | Amit Kumar |
+----+----------------+------------+
2 rows in set (0.00 sec)
型
这不是预期的,因为帐户1002的employee_id为空,我期望由于我们的关系是双向的一对一,它应该更新帐户1002的employee_id为2时保存实体在数据库。请帮助我理解双向关系是如何工作的
1条答案
按热度按时间zbsbpyhn1#
只需在
Employee
类中添加一个注解到Account
字段中,就像这样:字符串
再想想你的知识:
一对一表示单个实体与另一实体的单个示例相关联。源实体的一个示例最多可以Map到目标实体的一个示例。
已更新
实体Map看起来如下:
型
更新
更多的细节请检查这篇文章它真的很好它会帮助你,Vlad Mihalcea: onetoone-relationship