2010-11-20 190 views
3

嗨,我有以下型號:如何解決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(name = 「airportFrom)和@Column(name =」 機場至「)@ OneToOne,但我得到這個錯誤:「@oncolon(s)不允許在@onetoone財產」 – Neuquino 2010-11-20 21:34:31

回答

6

它是您需要的@JoinColumn,而不是@Column。

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

(和Frotthowe提到的,它似乎有點奇怪了與機場被OneToOne航班。我必須承認,通常忽略了域名,並假設名稱是一些僞無稽之談方便的問題:))

+0

我該怎麼做這在XML映射(不是註釋)? – TheVillageIdiot 2011-11-11 20:39:22

0

Flight類沒有定義ID。一個實體有一個ID是正常的,我懷疑這可能與你的問題有關。

+0

該類的Id它不是問題的一部分,這就是爲什麼它不在問題中。 – Neuquino 2010-11-21 00:58:30

1

@OneToOne是錯誤的。這意味着每個機場只有一個航班。使用@ManyToOne。而你需要通過@JoinColumn

+0

我認爲這取決於他的業務規則,但@JoinColumn是問題。 – 2015-09-04 10:03:15

0

使用@JoinColumn@OneToOne

一起指定引用往返於機場ID列還要注意的是懶惰不會在這種情況下工作。

+1

它的工作原理可選= false設置。 – Affe 2010-11-20 22:01:54

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; 
    } 
    //... 
} 
相關問題