JPA 多对多单向

Posted

技术标签:

【中文标题】JPA 多对多单向【英文标题】:JPA Many to many unidirectional 【发布时间】:2015-09-01 03:39:39 【问题描述】:

我使用 spring data jpa,我尝试做多对多的单向关系。

@Entity
public class Appartment 
   ...
   @ManyToMany
   private List<AppartmentFeatureOption> featureOption;
 

@Entity
public class AppartmentFeatureOption 
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long appartmentFeatureOptionId;

  private String name;

  private BigDecimal value;

我的数据库是在运行时创建的,但出现此错误

org.hibernate.DuplicateMappingException:相同的物理表名 [appartment_feature_option] 引用了几个逻辑表名:[AppartmentFeatureOption]、[Appartment_AppartmentFeatureOption]

有什么想法吗?

使用此代码进行编辑

@ManyToMany
@JoinTable(name="appartment_feautre_option_appartment", joinColumns=@JoinColumn(name="appartment_id"), inverseJoinColumns=@JoinColumn(name="appartment_feautre_option_id"))  
private List<AppartmentFeatureOption> featureOption;

【问题讨论】:

【参考方案1】:

这实际上是你真正的代码吗,也许问题是你在 AppartmentAppartmentFeatureOption 之间使用 ManyToMany 关系,而有AppartmentFeatureOption 中没有指向 Appartment 的链接。

根据我对一个 Appartment 的理解,您希望拥有多个 AppartmentFeatureOption,这是一种 OneToMany 关系。

【讨论】:

一对多是不行的,不同的公寓可以使用相同的选项。 是的,但是...一对多意味着对于一套公寓,您可以有多种选择 如果能够从 options 检索 apartments 具有商业价值,那么您需要一个多对多关系,如果不是,它是一个单对多关系...不过,我很高兴您最终找到了问题的答案;) 我不明白你为什么担心重复。在这两种情况下,关系都将导致连接表仅包含 ApartmentApartmentFeatureOptions 的 ID。连接表 ID 将是对 (AppartmentId,AppartmentFeatureId) 多对多和一对多的情况下,创建的表不太一样。

以上是关于JPA 多对多单向的主要内容,如果未能解决你的问题,请参考以下文章

Jpa之关联对象(单向多对多)

由 JPA 多对多产生的空连接表

Hibernate 单向/双向 多对多

具有额外多对多关系的 JPA 多对多

hibernate多对多查询

多对多 Spring Boot JPA 未填充多对多表