使用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()
这样的模式可以正常工作吗?谢谢你的帮助。
最佳答案
我找到了解决此问题的方法。您的错误是由于UpdatePropositionKey类中的@ManyToOne注释。我将此关系移到UpdateProposition类,仅留下UpdateRequest.id。因此,现在有两个从UpdateProposition类到UpdateRequest类的映射。第一个是通过组合键,第二个是通过@ManyToOne关系。两个映射使用同一列。另外,@ JoinColumn批注将属性“可更新的”和“可插入的”设置为false。这些更改之后,代码如下所示:
@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);
}
}
关于java - Play Framework 2.0.4,Java:复合主键声明和赋值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22323783/