java - Play Framework 2.0.4,Java : compound primary key declaration and assignment

标签 java jpa playframework playframework-2.0 ebean

使用 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/

相关文章:

java.lang.NullPointerException 在 android.support.v7.widget.RecyclerView.onMeasure ,交错网格布局

playframework - 使用支持WebSocket的浏览器进行集成测试

playframework - Redis 无法解决 Play 的依赖问题

java - 在 Java 中调度函数调用到具有相同接口(interface)的其他类

java - 在 ListView android 的底部显示最新项目

java - 当数据源是 SQLContainer 时如何使只有一列可编辑

java - EclipseLink 初始化中的 NullPointerException

hibernate - 将 JPA 实体命名为 "Group"是否非法?

java - JPQL 查询多对多关系,其中连接表中不存在项目

scala - Actor 名称不唯一 InvalidActorNameException