实体作为一对一关系返回的关键" Composite-ID"错误

时间:2012-01-13 21:28:00

标签: java spring one-to-one composite-key hibernate-annotations

我有以下两个实体:

   @Entity(name = "Employee")
   @Table(name = "EMPLOYEE")
   public class Employee implements Serializable {
      @Id
      @Column(name = "EMP_ID", insertable = true, updatable = false, nullable = false)
      private int id;

@Entity(name = "Draw")
@Table(name = "DRAW")

public class Draw extends AuditableEntity {
    @Id
    @OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinColumn(name = "EMP_ID", referencedColumnName = "EMP_ID")
    @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE,
        org.hibernate.annotations.CascadeType.MERGE})
    private Employee employee = null;

我们只是说这是他们想要建模的方式。这是指定的OneToOne关系。但是,当我去测试时,我收到以下错误:

  

嵌套异常是org.springframework.beans.factory.BeanCreationException:创建类路径资源[META-INF / spring / datasource-context.xml]中定义名为'sessionFactory'的bean时出错:init方法的调用失败;嵌套异常是org.hibernate.MappingException:composite-id类必须实现Serializable:com.myprojects.tet.data.entity.Draw

为什么employee中的Draw键被解释为复合ID?另外我如何修复此错误。 I have read引用的实体必须是可序列化的,但它还需要实现方法equalshashCode(我还没有实现)。那两个实现应该修复那个错误吗?

为清晰起见进行编辑:

我有两个模型表:EMPLOYEEDRAW

EMPLOYEE具有:整数emp_id,以及许多其他列。

DRAW具有:整数emp_id,整数totalPoints

绘图表将在每个特定时间填充和清除,因此列totalPoint不能在表EMPLOYEE中。我不确定我的实体关系是否正确(即将实体employee作为draw的ID。)

1 个答案:

答案 0 :(得分:2)

@JoinColumn替换为@PrimaryKeyJoinColumn

@Id
@Column(name = "EMP_ID")
private int id;

@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@PrimaryKeyJoinColumn(name = "EMP_ID", referencedColumnName = "EMP_ID")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.MERGE})
private Employee employee;