我可以在多对多关系的联接表中添加非 Id 字段吗?

Posted

技术标签:

【中文标题】我可以在多对多关系的联接表中添加非 Id 字段吗?【英文标题】:Can I add non-Id fields in join table in Many to Many Relationship? 【发布时间】:2015-05-05 09:09:43 【问题描述】:

我在PersonAddress 表之间有多对多关系。

人:

@Entity
@Table(name = "PERSON_MTM", schema = "Examples")
public class Person 

@Id
@Column(name = "PERSON_ID")
private String personId;

@Column(name = "PERSON_NAME")
private String personName;

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "PERSON_ADDRESS", schema = "KunderaExamples",joinColumns =  @JoinColumn(name = "PERSON_ID") , inverseJoinColumns =   @JoinColumn(name = "ADDRESS_ID") )
private Set<AddressMTM> addresses;

//setters and getters


地址:

@Entity
@Table(name = "ADDRESS_MTM", schema = "Examples")
public class Address

@Id
@Column(name = "ADDRESS_ID")
private String addressId;

@Column(name = "STREET")
private String street;

// setters and getters


我有一个名为 PERSON_ADDRESSjoinTable

我可以将非 Id 字段添加到连接表吗? 里面有没有 JPA 约束?

注意:我的问题不是Hibernate。我在问 代表JPA 2.1

【问题讨论】:

你说的JPA约束是什么意思? @swinkler JPA 约束意味着是否有任何文档建议或强制仅使用 Id 字段。 我将 API 链接添加到 JoinTable/joinColumns,您可以在其中看到 JPA 没有任何限制。 连接表的列将是双方的id列。这就是全部。如果您想要“其他”列,则创建一个中间实体(如 *** 上有关该主题的许多其他帖子所示) 【参考方案1】:

您可以使用多个JoinColumms,例如包括 PERSON_NAME(如果这对您的逻辑有意义)

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(
    name = "PERSON_ADDRESS", 
    schema = "KunderaExamples",
    joinColumns =  
      @JoinColumn(name="PERSON_NAME"),
      @JoinColumn(name = "PERSON_ID") , 
    inverseJoinColumns =   
      @JoinColumn(name = "ADDRESS_ID") )
private Set<AddressMTM> addresses;

【讨论】:

以上是关于我可以在多对多关系的联接表中添加非 Id 字段吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在多对多表中添加列(Django)

学说2:在多对多关系中引用连接表

教义 - 在多对多关系表中插入记录

在多对多 SQL 表中查找数据关系或图形

如何避免在 SQLAlchemy - python 的多对多关系表中添加重复项?

如何在多对多关系中使用带有可编辑字段的 TabularInline?