playframework2.0.4,java:复合主键声明和赋值

at0kjp5o  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(589)

使用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);
        }
    }
}

我的目标是用一个外键、一个日期和一个自动递增的序列号Map一个主键复合的表。例如,这个模型抛出 RuntimeException: Error reading annotations . 如何实现我的用例?
一旦这个问题解决了,如何分配日期和外键?图案会像这样吗 updateProposition.id.date = Calendar.getInstance().getTime() 工作顺利吗?
谢谢你的帮助。

c9x0cxw0

c9x0cxw01#

我找到了这个问题的解决办法。您的错误是由于updatepropositionkey类中的@manytoone注解造成的。我将此关系移动到updateproposition类,只留下updaterequest.id。所以现在有两个从updateproposition类到updaterequest类的Map。一个是通过复合键,第二个是通过@manytone关系。两个Map使用同一列。此外,@joincolumn annotation的“updateable”和“insertable”属性设置为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);
    }
}

相关问题