我在使用@ManyToOne关系时遇到问题,因为我的外键和主键具有相同的名称,所以Hibernate正在考虑我映射为当前表的列名。 所以我想我会使用@JoinColumn注释的表属性,但它似乎不起作用。我为它提供了实际的价值表,但它没有采取。也尝试了类名。 以下是实体。您可以在两个表中看到PRJ_NBR相同。因此,当我尝试运行该项目时,我收到的错误如找不到预期的辅助表:没有HEAD可用
如果从@JoinColumn中删除 table 属性,我会收到错误 - 实体映射中的重复列:com.example.jpademo.Detail列:PRJ_NBR(应该映射) with insert =" false" update =" false")
@Entity(name="Head")
@Table(name = "HEAD")
public class QuoteHead {
@Id
@Column(name = "PRJ_NBR")
private Integer projNumber;
@Column(name = "CUS_SYS_ID")
private Integer cusSysId;
@OneToMany(mappedBy = "head", cascade = CascadeType.ALL, orphanRemoval =
true)
private List<Detail> details = new ArrayList<Detail>();
}
@Entity
@Table(name = "DETAIL")
@JsonIgnoreProperties
public class Detail {
@Transient
private Integer projectNumber;
@Transient
private Integer itemNumber;
@Transient
private Integer sequenceNumber;
@ManyToOne
@JoinColumn(name = "PRJ_NBR", table = "HEAD")
private Head head;
@JsonIgnore
@EmbeddedId
private DetailCompositeId id;
}
@Embeddable
public class DetailCompositeId implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "PRJ_NBR")
private Integer projectNumber;
@Column(name = "ITM_NBR")
private Integer itemNum;
@Column(name = "SEQ_NBR")
private Integer sequenceNumber;
}
答案 0 :(得分:1)
删除&#39;表&#39;并尝试将insertable =&#34; false&#34; ,updatable =&#34; false&#34;然后我认为它应该工作
答案 1 :(得分:1)
您可以使用@MapsId
注释。
请参阅此帖子:can someone please explain me @MapsId in hibernate?
您可以删除@JoinColumn
映射中的@ManyToOne
,并将其替换为@MapsId
,如下所示:
@ManyToOne
@MapsId("projectNumber")
private Head head;