كيفية حل خطأ السبات: عمود متكرر في رسم الخرائط للكيان؟
-
26-09-2019 - |
سؤال
مرحبًا ، لدي النموذج التالي:
@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 لن يعمل في هذه الحالة.
لا تنتمي إلى StackOverflow