spring-boot - 如何将一个表中的实体链接到另一个表中?
问题描述
如何将另一个表中已经存在的实体链接到我的important_table
?我可以插入 ID,但这需要查询。我想要的是系统自动将元素映射people_table
到important_table
.
@Entity(name = "important_table")
data class ImportantEntity(
@Id @GeneratedValue @Column(name = "id")
val id: Short = 0,
@Embedded
val person: Person
)
个人实体
@Entity(name = "person_table")
data class PersonEntity(
@Id @GeneratedValue @Column(name = "id")
val id: Long = 0,
...
)
我尝试嵌入但在数据库中创建了一个重复的人。我想要这个链接,这样我就可以轻松找到“重要”的人,并且仍然可以获得相同的数据。
解决方案
使用@OneToOne
映射让 Hibernate(或任何 ORM)知道您正在将表链接在一起。
@Entity(name = "important_table")
data class ImportantEntity(
@Id @GeneratedValue @Column(name = "id")
val id: Short = 0,
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
val person: Person
)
当您说:I could insert the ID but then that would require a query
时,确实如此...但是使用 时FetchType.EAGER
,您的 ORM 将为您执行额外的查询...它是透明的。
尽管如此,请注意这一点,如果您不注意您的关系,您最终可能会将整个数据库加载到内存中......
正如本网站和本教程中所解释的那样,@Embedded
用于帮助拥有一个漂亮而干净的对象定义,同时将数据存储到一个表而不是 2 个......例如,在您的情况下,您将存储来自类Person
进表ImportantTable
。
希望能帮助到你 !
推荐阅读
- apache - 代理 Apache FastCGI
- c# - 在 Datagrid 中禁用标题上下文菜单
- r - 如何在不使用 for 循环的情况下在 R 中实现动态计数?
- java - 在多线程环境中使用 HashSet 作为一个非常简单的缓存是否安全?
- python - 使用 Paramiko 运行数据库脚本失败并出现退出代码
- php - 获取具有不同结构开头的两种类型的 json 文件
- css - 在使用 css 模块时导入 mixin 和配置
- azure - Microsoft Azure 提供的在线存储和身份验证选项之间有什么区别?
- javascript - 单击其他任何位置时执行操作
- python - 如何获得用于测试的特定行和用于培训的其他行?