Frage

HALLO, ich habe folgendes Modell:

@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;
  }
}

Und ich bin immer diese Fehlermeldung:

org.hibernate.MappingException: Repeated column in mapping for entity: model.entities.Flight column: airportId (should be mapped with insert="false" update="false")
War es hilfreich?

Lösung

Es ist @JoinColumn Sie brauchen, nicht @Column.

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

etc

(und wie Frotthowe erwähnte, ist es ein wenig seltsam erscheint für Flüge mit den Flughäfen sein OneToOne. Ich muß gestehen, in der Regel die Domain zu ignorieren und unter der Annahme, der Name einig Pseudo-Unsinn ist die Frage :) zu erleichtern)

Andere Tipps

@OneToOne ist falsch. Es würde bedeuten, dass jeder Flughafen nur einen Flug hat. Verwenden @ManyToOne. Und Sie müssen die Spalte angeben, dass Verweise die vom und zum Flughafen-ID von @JoinColumn

Ihre Flight Klasse hat keine ID definiert. Es ist normal für ein Unternehmen eine ID zu haben, und ich vermute, das für Ihr Problem in Zusammenhang stehen kann.

Ich verwende für meine Tabelle statt Flughäfen Ich habe Cities:

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;
  }
  //...
}

Mit @JoinColumn zusammen mit @OneToOne

Beachten Sie, dass faul wird nicht funktionieren in diesem Fall.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top