Comment résoudre l'erreur veille prolongée: colonne répétée dans la cartographie pour l'entité?

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

Question

HI, je le modèle suivant:

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

Et je reçois cette erreur:

org.hibernate.MappingException: Repeated column in mapping for entity: model.entities.Flight column: airportId (should be mapped with insert="false" update="false")
Était-ce utile?

La solution

Il est @JoinColumn dont vous avez besoin, pas @Column.

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

etc

(et Frotthowe mentionné, il ne semble un peu étrange pour que les vols soient OneToOne avec les aéroports. Je dois avouer ignorer généralement le domaine et en supposant que les noms sont des bêtises pseudo pour faciliter la question :))

Autres conseils

@OneToOne est erroné. Cela voudrait dire que chaque aéroport a un seul vol. Utilisez @ManyToOne. Et vous devez spécifier la colonne qui fait référence à la provenance et à l'aéroport par id @JoinColumn

Votre classe Flight n'a pas id défini. Il est normal pour une entité d'avoir une carte d'identité, et je soupçonne que cela peut être lié à votre problème.

Je me sers pour ma table au lieu des aéroports que j'ai Villes:

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

Utilisez @JoinColumn avec @OneToOne

Notez également que paresseux ne fonctionnera pas dans ce cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top