如何解决休眠错误:重复列映射实体?
-
26-09-2019 - |
题
HI,我有以下模式:
@Entity
class Flight{
private Airport airportFrom;
private Airport airportTo;
@OneToOne(fetch=FetchType.LAZY,optional=false)
public Airport getAirportFrom(){
return this.airportFrom;
}
@OneToOne(fetch=FetchType.LAZY,optional=false)
public Airport getAirportTo(){
return this.airportTo;
}
}
@Entity
class Airport{
private Integer airportId;
@Id
public Integer getAirportId(){
this.airportId;
}
}
和我得到这个错误:
org.hibernate.MappingException: Repeated column in mapping for entity: model.entities.Flight column: airportId (should be mapped with insert="false" update="false")
解决方案
这是@JoinColumn你需要,而不是@Column。
@OneToOne(fetch=FetchType.LAZY,optional=false)
@JoinColumn(name="airportFrom", referencedColumnName="airportId")
public Airport getAirportFrom(){
return this.airportFrom;
}
等
(和Frotthowe提到的,它似乎有点古怪的航班是OneToOne与机场。我必须承认,通常忽略了域名,并假设名称是一些伪废话,方便的问题:))
其他提示
@OneToOne
是错误的。这意味着每个机场只有一个航班。使用@ManyToOne
。而你需要指定列的往返于机场ID由@JoinColumn
引用
您Flight
类没有定义的ID。这是正常的实体有一个ID,我怀疑这可能与你的问题。
我用这对我的表,而不是机场的我的城市:
class Tender implements java.io.Serializable {
//...
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "city")
public City getCity() {
return this.city;
}
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "tour_city")
public City getTourCity() {
return this.tourCity;
}
//...
}
City implements java.io.Serializable {
//...
@Id
@SequenceGenerator(name = "city_pkey", sequenceName = "city_uid_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "city_pkey")
@Column(name = "uid", unique = true, nullable = false)
public int getUid() {
return this.uid;
}
//...
}
使用@JoinColumn
连同@OneToOne
还值得注意的是懒将在这种情况下不工作。
不隶属于 StackOverflow