我有一个实体 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]) 具有相同的列数