Java 如何解决hibernate错误:实体映射中的重复列?

Java 如何解决hibernate错误:实体映射中的重复列?,java,hibernate-mapping,hibernate3,Java,Hibernate Mapping,Hibernate3,您好,我有以下型号: @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,optio

您好,我有以下型号:

@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")

您的
航班
舱没有定义id。实体具有id是正常的,我怀疑这可能与您的问题有关。

您需要的是@JoinColumn,而不是@Column

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


(正如Frotthowe所提到的,航班与机场是一对一的确实有点奇怪。我必须承认,通常忽略了域名,并假设这些名称是一些伪废话,以便于回答这个问题:)

@OneToOne
是错误的。这意味着每个机场只有一个航班。使用
@ManyToOne
。您需要通过
@JoinColumn

@JoinColumn
@OneToOne
一起使用来指定引用往返机场id的列


还请注意,在这种情况下,lazy将不起作用。

我将其用于我的表格,而不是机场我有城市:

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

我已经尝试在每个@OneToOne下添加@Column(name=“airportFrom”)和@Column(name=“airportTo”),但是我得到了一个错误:“@Column(s)不允许在@OneToOne属性上使用”类的Id它不是问题的一部分,这就是为什么它不在问题中的原因。我如何在xml映射(不是注释)中实现这一点?我认为这取决于他的业务规则,但@join列是问题所在。