10

こんにちは、私は次のモデルを持っています:

@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")
4

5 に答える 5

11

必要なのは @Column ではなく @JoinColumn です。

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

(Frotthowe が述べたように、Flights が空港と OneToOne になるのは少し奇妙に思えます。私は通常、ドメインを無視し、質問を容易にするために名前が疑似ナンセンスであると想定していることを告白しなければなりません :) )

于 2010-11-20T21:50:49.030 に答える
1

@OneToOne間違っている。各空港にはフライトが 1 つしかないことを意味します。を使用し@ManyToOneます。そして、From と To の空港 ID を参照する列を指定する必要があります。@JoinColumn

于 2010-11-20T21:56:28.793 に答える
0

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

于 2010-11-20T21:49:17.600 に答える
0

@JoinColumnと一緒に使う@OneToOne

また、この場合、lazy は機能しないことに注意してください。

于 2010-11-20T22:00:41.427 に答える
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;
  }
  //...
}
于 2013-02-17T18:33:28.563 に答える