我在使用@ManyToOne关系时遇到问题,因为我的外键和主键具有相同的名称,因此Hibernate正在考虑将我映射为当前表的列名。
所以我想我将使用@JoinColumn批注的表属性,但似乎无法正常工作。我为它的值提供了实际的表,但是没有用。也尝试了类名。
以下是实体。您可以在两个表中看到PRJ_NBR相同。因此,当我尝试运行项目时,出现错误,例如找不到所需的辅助表:没有可用的HEAD
如果我从@JoinColumn中删除表格属性,则会出现错误-实体映射中的重复列:com.example.jpademo.Detail列:PRJ_NBR(应使用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;
}
最佳答案
删除“表”并尝试放入insertable =“ false”,updatable =“ false”,然后我认为它应该可以工作
关于java - 有人知道@JoinColumn批注中表属性的用法吗?我应该提供实际的表名还是实体名?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46528731/