使用 Ebean 作为 ORM,我有以下模型类:
@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:读取注释时出错
。我如何实现我的用例?
这个问题解决后,如何分配日期和外键?
像 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 : compound primary key declaration and assignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22323783/