首页 > 解决方案 > 如何将一个表中的实体链接到另一个表中?

问题描述

如何将另一个表中已经存在的实体链接到我的important_table?我可以插入 ID,但这需要查询。我想要的是系统自动将元素映射people_tableimportant_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,
        ...
)

我尝试嵌入但在数据库中创建了一个重复的人。我想要这个链接,这样我就可以轻松找到“重要”的人,并且仍然可以获得相同的数据。

标签: spring-bootkotlin

解决方案


使用@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

希望能帮助到你 !


推荐阅读