【问题标题】:Hibernate doesn't save parent's id in child table when saving parent保存父级时,Hibernate 不会在子表中保存父级的 id
【发布时间】:2019-08-29 08:40:21
【问题描述】:

这是我的数据库结构:

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
)

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

我是否缺少一些额外的注释参数?还是我的关系不正常了? 我可以先保存 Information,然后获取它的 id,然后对 Details 进行更新,但这不是我想要的。

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

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

然后

dao.save(information)

【问题讨论】:

    标签: hibernate jpa kotlin spring-data-jpa


    【解决方案1】:

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

    【讨论】:

    • 难道没有通过 Hiberante mappngs 自动执行此操作的选项吗?我知道我可以做到,但我不太喜欢这种方法
    • 不,因为它实际上可以指向不同的Information 对象,在两个表之间形成一个对象链,如果这是您的数据结构所需要的。 Hibernate 不应该决定你的数据模型是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多