【发布时间】:2015-07-11 23:32:54
【问题描述】:
我有以下两个实体,当我尝试将项目添加到我的汽车表时,它显示以下错误消息;因此,它不允许我拥有多于一辆具有“自动”传输的汽车。
错误:
#1062 - Duplicate entry 'Auto' for key 'UK_bca5dfkfd4fjdhfh4ddirfhdhesr'
实体:
汽车
@Entity
public class Car implements java.io.Serializable {
@Id
@GeneratedValue
long id;
@Column(name="transmission", nullable = false)
String transmission;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "car")
Set<CarFactory> factories;
...
}
汽车表的示例值:
10 Auto
12 Auto
43 Manual
54 Manual
65 Normal
68 Standard
90 Normal
99 NoGear
汽车工厂
@Entity
public class CarFactory implements java.io.Serializable {
@Id
@JoinColumn(name="transmission",referencedColumnName = "transmission")
@ManyToOne
Car car;
@Id
@JoinColumn(name="factory_id", referencedColumnName= "id")
@ManyToOne
Factory factory;
...
}
CarFactory 表的预期值
Auto Fac1
Auto Fac2
Manual Fac1
Auto Fac5
Standard Fac6
Normal Fac3
NoGear Fac1
我也关注了这个question 的答案,但它没有用。
长话短说,我需要一个表,其中包含来自其他表的两个外键,以及组合的主键。它不应该强制参与表中的唯一外键。
【问题讨论】:
-
这不是多对一的关联,因为多辆汽车有相同的传输。您可能应该在工厂中有一个 Set
supportedTransmissions,并使用查询来查找支持与给定汽车相同的传输的所有工厂。 -
@JBNizet 那么哪个字段将是表的主键?我认为有一个带有复合键的表是很常见的。这样,主键都不是唯一的,但它们的组合是唯一的
-
当我尝试将项目添加到我的 car 表时,它会显示以下错误消息 - 您真的需要将 Auto multiletimes 添加到您的汽车表吗?在我看来,您只需要在您的汽车表中有 1 个带有传输“自动”的条目,并且在您的 CarFactory 表中有多个这样的条目。
-
也检查这个问题:stackoverflow.com/questions/7594812 它非常相似,并使用 Hibernate 的
@JoinFormula解决。 -
你为什么要违反规则?你到底想要什么?? @JoinColumn(name="transmission",referencedColumnName = "transmission") 你为什么不用@JoinColumn(name="car_id",referencedColumnName = "id") 改变这个???
标签: java hibernate jpa orm hibernate-mapping