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】:这实际上是你真正的代码吗,也许问题是你在 Appartment 和 AppartmentFeatureOption 之间使用 ManyToMany 关系,而有AppartmentFeatureOption 中没有指向 Appartment 的链接。
根据我对一个 Appartment 的理解,您希望拥有多个 AppartmentFeatureOption,这是一种 OneToMany 关系。
【讨论】:
一对多是不行的,不同的公寓可以使用相同的选项。 是的,但是...一对多意味着对于一套公寓,您可以有多种选择 如果能够从 options 检索 apartments 具有商业价值,那么您需要一个多对多关系,如果不是,它是一个单对多关系...不过,我很高兴您最终找到了问题的答案;) 我不明白你为什么担心重复。在这两种情况下,关系都将导致连接表仅包含 Apartment 和 ApartmentFeatureOptions 的 ID。连接表 ID 将是对 (AppartmentId,AppartmentFeatureId) 多对多和一对多的情况下,创建的表不太一样。以上是关于JPA 多对多单向的主要内容,如果未能解决你的问题,请参考以下文章