我找到了解决这个问题的方法。您的错误是因为UpdatePropositionKey类中的@ManyToOne批注。我将此关系移至UpdateProposition类,只留下UpdateRequest.id。所以现在有两个从UpdateProposition类到UpdateRequest类的映射。一个是复合键,第二个是@ManyToOne关系。两个映射都使用相同的列。另外@JoinColumn注释将属性'可更新和'可插入'设置为false。在这些之后所有的changecode看起来如下:
@Entity @Table(name = "update_proposition") public class UpdateProposition extends Model { public UpdateProposition(int aSerial, Date aDate) { id = new UpdatePropositionKey(); id.serial = aSerial; id.date = aDate; } @EmbeddedId private UpdatePropositionKey id; @ManyToOne @JoinColumn(name = "update_request_id", insertable = false, updatable = false) private UpdateRequest updateRequest; public String fieldName; public String oldValue; public String newValue; public void setUpdateRequest(UpdateRequest aUpdateRequest) { updateRequest = aUpdateRequest; id.updateRequest_id = aUpdateRequest.id; } public UpdateRequest getUpdateRequest() { return updateRequest; } } @Embeddable public class UpdatePropositionKey implements Serializable { @Id public int serial; public Date date; public int updateRequest_id; @Override public int hashCode() { return super.hashCode(); } @Override public boolean equals(final Object obj) { return super.equals(obj); } }