使用Ebean作为ORM,我有以下Model类:
@Entity
@Table(name = "update_proposition")
public class UpdateProposition extends Model {
@EmbeddedId
public UpdatePropositionKey id;
public String fieldName;
public String oldValue;
public String newValue;
@Embeddable
public class UpdatePropositionKey implements Serializable {
@ManyToOne
@JoinColumn(name = "update_request")
public UpdateRequest updateRequest;
public Date date;
@Id
public int serial;
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(final Object obj) {
return super.equals(obj);
}
}
}
我的目标是通过外键,日期和自动递增的序列号映射具有主键复合的表。
对于该实例,此模型会抛出RuntimeException: Error reading annotations
。我该如何实现我的用例?
一旦这个问题解决了,如何分配日期和外键?
像updateProposition.id.date = Calendar.getInstance().getTime()
这样的模式是否可行?
感谢您的帮助。
答案 0 :(得分:0)
我找到了解决这个问题的方法。您的错误是因为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);
}
}