エンティティのマッピングで繰り返さコラム:どのように休止状態エラーを解決するには?
-
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
を使用してください。そして、あなたは、列を指定する必要があり、その@JoinColumn
によるから、空港のIDへの参照
あなたの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