我正在使用spring mvc并在2个表之间创建一对多的关系。我有2个型号:
ContractHeader.java
@Entity
@Table(name = "CONTRACT_HEADER")
public class ContractHeader {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@OneToMany(mappedBy = "contractHeader", cascade = CascadeType.ALL)
private List<ContractEntitlement> contractEntitlements;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<ContractEntitlement> getContractEntitlements() {
return contractEntitlements;
}
public void setContractEntitlements(List<ContractEntitlement> contractEntitlements) {
this.contractEntitlements = contractEntitlements;
}
}
ContractEntitlement.java
@Entity
@Table(name = "CONTRACT_ENTITLEMENT")
public class ContractEntitlement {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
@JoinColumn(name = "id")
private ContractHeader contractHeader;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public ContractHeader getContractHeader() {
return contractHeader;
}
public void setContractHeader(ContractHeader contractHeader) {
this.contractHeader = contractHeader;
}
}
我在eclipse sts中发布时遇到错误:
deploy is failing=Error occurred during deployment: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: org.hibernate.MappingException: Repeated column in mapping for entity: com.at.ccts.model.ContractEntitlement column: id (should be mapped with insert="false" update="false"). Please see server.log for more details.
有什么想法吗?
答案 0 :(得分:1)
在您的实体 ContractHeader 中,您的映射会为表提供两列名称为 id 的列,更改@JoinColumn中的name属性
@ManyToOne
@JoinColumn(name = "idContractHeader")
private ContractHeader contractHeader;
答案 1 :(得分:0)
你应该使用这个链接: -
@OneToMany(mappedBy = "ContractHeader", cascade = CascadeType.ALL)
private List<ContractEntitlement> contractEntitlements;