エンティティのマッピングで繰り返さコラム:どのように休止状態エラーを解決するには?

StackOverflow https://stackoverflow.com/questions/4235107

質問

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

また、注目すべきこと怠け者の意志ではない。この場合、作業ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top