如何使用嵌入式实体处理 JPA/Hibernate 中的一对多关系映射

问题描述 投票:0回答:1

我有一个实体 AccountContact,其中包含字段 id、accountId 和代表帐户联系人的联系人实体列表。 Contact 实体嵌入在 AccountContact 中。我不想为此使用两个不同的表。如何在我的实体中正确映射这种一对多关系?关于处理此类映射的任何建议。

CREATE TABLE IF NOT EXISTS account_contact
(
    id         INT PRIMARY KEY,
    account_id TEXT NOT NULL,
    phone      TEXT NOT NULL,
    name       TEXT NOT NULL
);
@Entity
@Table(name = "account_contact")
class AccountContact(
    @Id
    @Column(name = "id", nullable = false)
    val id: Int,
    @Column(name = "account_id", nullable = false)
    val accountId: String,
    @ElementCollection(fetch = FetchType.LAZY)
    @CollectionTable(
        name = "account_contact",
        joinColumns = [JoinColumn(name = "id", nullable = false)]
    )
    val contacts: Set<Contact>
)

@Embeddable
data class Contact(
    @Column(name = "phone", nullable = false)
    val phone: String,
    @Column(name = "name", nullable = false)
    val name: String
)

错误:由 org.hibernate.MappingException 引起:外键 (FK2cv8b63x720avx5k79vw8kggq:account_contact [id])) 必须与引用的主键 (account_contact [id,name,phone]) 具有相同的列数

sql hibernate jpa
1个回答
0
投票

我找到了一种替代方法来完成这项任务,我更喜欢这种方法

© www.soinside.com 2019 - 2024. All rights reserved.