2010-11-20 7 views
3

HIは、私は次のモデルがあります:Hibernateエラーを解決するには:エンティティのマッピングで列を繰り返しますか?

@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") 
+0

私はすでにそれぞれの下に@Column(名前=「airportFrom)と@Column(名前は=」airportTo ")を追加しようとしました@ OneToOne、しかし、私はこのエラーを受け取りました: "@コーンは@onetooneプロパティで許可されていません" – Neuquino

答えて

6

@Columnではなく、@JoinColumnが必要です。

@OneToOne(fetch=FetchType.LAZY,optional=false) 
    @JoinColumn(name="airportFrom", referencedColumnName="airportId") 
    public Airport getAirportFrom(){ 
    return this.airportFrom; 
    } 

など

(とFrotthoweが述べたように、空港でOneToOneことへの航空券を少し奇妙に思えるん。私は通常、ドメインを無視し、名前を仮定に告白しなければならないがに、いくつかの擬似ナンセンスです質問を容易にする:))

+0

どのように達成できますか?これはxmlマッピング(アノテーションではありません)ですか? – TheVillageIdiot

0

あなたFlightクラスが定義されたIDを持っていません。エンティティがIDを持つのは正常ですが、これはあなたの問題に関連している可能性があります。

+0

クラスのIDは問題の一部ではないので、それは問題ではありません。 – Neuquino

1

@OneToOneが間違っています。つまり、各空港には1つのフライトしかありません。 @ManyToOneを使用してください。そして、あなたはまた、この場合には動作しませんその怠惰に注意してください@OneToOne

と一緒に使用@JoinColumn@JoinColumn

+0

ビジネスルールに依存しますが、@JoinColumnが問題でした。 –

0

でから、空港へのidを参照する列を指定する必要があります。私が代わりに私が都市を持って空港の私のテーブルのためにこれを使用しています

+1

optional = falseが設定されている場合に機能します。 – Affe

0

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; 
    } 
    //... 
} 
関連する問題