首页 > 解决方案 > 如何创建一个可嵌入的对象列表,该列表来自 OneToMany 中的自己的表,但基于 One 的 Id

问题描述

所以,我理解这个问题似乎有点奇怪,可能只是为了澄清:

@Entity
@Table(name = "OUTTER")
class Outter(){

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "outterId")
    var id: Long? = null

    @ElementCollection
    val listOfInner = mutableListOf<Inner>()
}
@Embeddable
@Table(name = "INNER")
data class Inner(
        @Id
        @JoinColumn(name = "outterId")
        var outter: Outter
)

不起作用,我不知道为什么。它似乎遵循我看过的指南,所以不确定我错过了什么。

外部:

outterId | outterStuff 
---------------------
 1       | info      

内:

outterId | innerIndex | innerStuff
--------------------------------
 1       | 0          | innerInfo

所以它是 1 到多个,但内部的主键是 outterId,然后它使用其他键来确保它是唯一的(不是嵌入式 ID)

标签: springhibernatejpa

解决方案


Embeddable 没有独立的身份。你也不应该@Table为他们定义一个。

@Entity
@Table(name = "OUTTER")
class Outter(){

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "outterId")
    var id: Long? = null

    @ElementCollection
    @CollectionTable(name = "INNER", joinColumn = "outterId")
    val listOfInner = mutableListOf<Inner>()
}

@Embeddable
data class Inner(
        //fields as required
)

推荐阅读