spring - 如何在 Spring Boot 中创建实体以使 id 保持不变
问题描述
在我的Spring Boot应用程序中,假设我有一个名为A
:
@Entity
public class A{
@Id
Long id;
A(){}
}
另一个名为B
:
@Entity
public class B{
@Id
Long id;
A a;
B(){}
}
我想要的是 -每当我创建 B 的实例时,都会使用相同的 id 创建 A。
我该怎么做 ?
就像在 JSON 中一样,B 的一个实例:
{
"id": "x",
"a": {
"id": "x"
}
}
我得到什么:
{
"id": "x",
"a": {
"id": "y"
}
}
解决方案
它可以通过使用 Hibernate 的@MapsId注解来实现。这里有一篇好文章。我将在下面提供一个简化的示例:
一类:
@Entity
public class A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@OneToOne(mappedBy = "a", cascade = CascadeType.ALL)
private B b;
...
}
B类:
@Entity
public class B {
@Id
private Integer id;
@OneToOne
@JoinColumn
@MapsId
private A a;
...
}
在此示例中,主键B.id
嵌入自A.id
.
推荐阅读
- c++ - 是否有用于同步的缓冲方法?
- javascript - 使 Bootstrap-Vue 模态可拖动
- python - 如果一个字段为 TRUE,则自动从数据库中删除对象
- python - 在pyqt5的屏幕上打印后如何检查复选框是否被勾选?
- angular2-nativescript - 错误是:ENOENT:没有这样的文件或目录,stat 'D:\MyPrj\App_Resources\Android'
- ionic-framework - Ionic 4. 替代 platform.lang()
- c# - 设置没有名称属性的元素的内容
- c# - if(!bool) 的真正含义是什么?
- docker - 如何将现有的 Kubernetes 集群与在 WSL2 上运行的 Ubuntu 连接起来?
- python - 使用用于使用 Python 进行身份验证的两个密码之一登录到多个服务器