首页 > 解决方案 > 保存父级时,Hibernate 不会在子表中保存父级的 id

问题描述

这是我的数据库结构:

details
id, information_id

information
id, name

这是我的信息实体:

@Entity
@Table(name = "information")
data class Information(
        @Id @GeneratedValue(strategy = GenerationType.IDENTITY) 
        val id: Long? = 0,   

        val name: String,

        @OneToOne(cascade = arrayOf(CascadeType.ALL), mappedBy = "information")
        val details: Detials? = null
)

这是详细信息

@Entity
@Table(name = "details")
data class Details(
        @Id @GeneratedValue(strategy = GenerationType.IDENTITY) 
        val id: Long? = null,
        val additionalData: String,

        @OneToOne
        @JoinColumn(name = "information_id", referencedColumnName = "id")
        var information: Information? = null
)

当我保存新创建的信息时,我想将该实体的 id 保存在details.information_id中- 它现在不工作并且details.information_id为空。

我是否缺少一些额外的注释参数?还是我的关系不正常了?我可以先保存信息,然后获取其 ID,然后更新详细信息,但这不是我想要的。

编辑:我这样创建我的信息

val information = Information(
                name = "XXXX",
                details = Details(additionalData = "YYYY)
        )

接着

dao.save(information)

标签: hibernatejpakotlinspring-data-jpa

解决方案


YourInformation.details包含Details对象,但Details.information也必须指向原始Information对象。


推荐阅读