HI,我有以下模式:

@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与机场。我必须承认,通常忽略了域名,并假设名称是一些伪废话,方便的问题:))

其他提示

@OneToOne是错误的。这意味着每个机场只有一个航班。使用@ManyToOne。而你需要指定列的往返于机场ID由@JoinColumn引用

Flight类没有定义的ID。这是正常的实体有一个ID,我怀疑这可能与你的问题。

我用这对我的表,而不是机场的我的城市:

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

还值得注意的是懒将在这种情况下不工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top