كيفية حل خطأ السبات: عمود متكرر في رسم الخرائط للكيان؟

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

سؤال

مرحبًا ، لدي النموذج التالي:

@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 خطأ. هذا يعني أن كل مطار لديه رحلة واحدة فقط. يستخدم @ManyToOne. وتحتاج إلى تحديد العمود الذي يشير إلى معرف المطار من وإلى @JoinColumn

لك Flight الفصل ليس لديه معرف محدد. من الطبيعي أن يكون لدى كيان معرف ، وأظن أن هذا قد يكون مرتبطًا بمشكلتك.

أنا أستخدم هذا لطاولتي بدلاً من المطارات لدي مدن:

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

لاحظ أيضًا أن Lazy لن يعمل في هذه الحالة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top