java - Spring boot hibernate中@OneToOne的真正目的是什么?
问题描述
我有两个名为Users和Dependents的实体。我想在这两个实体之间建立OneToOne关系。正如 OneToOne 的真正含义所述 -
Users 实体中的每个用户都应该有一个且只有一个依赖项。Dependents 实体中的每个依赖都应该只与一个且只有一个用户相关。
但是,当我将 @OneToOne 添加到 Dependents 实体时,它不会阻止我将两个家属添加到同一个用户。@OneToOne 或任何其他关系注释(如 @ManyToMany、@OneToMany、@ManyToOne)的真正用途是什么?
用户.java
@Entity
@Table
public class Users {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private String teamName;
private Integer salary;
public Users() {
}
public Users(Integer id, String name, String teamName, Integer salary) {
this.id = id;
this.name = name;
this.teamName = teamName;
this.salary = salary;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTeamName() {
return teamName;
}
public void setTeamName(String teamName) {
this.teamName = teamName;
}
public Integer getSalary() {
return salary;
}
public void setSalary(Integer salary) {
this.salary = salary;
}
}
家属.java
@Entity
@Table
public class Dependents {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String relationship;
@OneToOne
private Users user;
public Dependents() {
}
public Dependents(int id, String name, String relationship) {
this.id = id;
this.name = name;
this.relationship = relationship;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRelationship() {
return relationship;
}
public void setRelationship(String relationship) {
this.relationship = relationship;
}
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
}
在我的DependentsService.java中,我正在保存 Dependents 对象,例如-
public Dependents addNewDependent(Integer userId, Dependents dependent) {
dependent.setUser(usersRepository.getOne(userId));
return dependentsRepository.save(dependent);
}
在这里,我使用传递的 userId 从 Users 实体中获取用户并将其存储在 Dependents 对象中。当我为两个或多个家属传递相同的 userId 时,它将从 Users 实体中获取相同的用户并将其存储在 Dependents 实体中。这违反了 OneToOne 关系。有人可以向我解释一下,我怎样才能实现真正的 OneToOne 关系?还请解释关系注释的真正目的是什么 - @OneToOne、@OneToMany、@ManyToOne 和 @ManyToMany?
解决方案
Hibernate 不会做任何额外的检查来确保记录已经存在。您有责任编写满足 OneToOne 关系的代码(这也取决于您的 UI 屏幕)。如果您仍然想抛出一些异常,请将您的主键设置为依赖表中的外键。然后你得到数据库异常。
推荐阅读
- javascript - 从私钥生成比特币公共地址的尝试失败
- css - 通过 css 更改调整大小的属性
- twilio - Gather 动词不适用于会议中的第一个参与者,仅适用于最后一个连接的参与者
- json - 当默认时间戳格式设置为其他内容时,如何在 Spring Boot 控制器请求正文中传递日期 yyyy-mm-dd
- python - scrapy-splash 不返回splash处理的html
- pega - 如何从字段中保存数据
- node.js - 使用 Crypto 的 AES 加密和使用 CryptoJS 的解密返回空字符串
- css - 我在 HTML 5 和 CSS 中的标题横幅不起作用
- javascript - js代码在开始时对图像进行错误旋转
- javascript - 实时变色