Hibernate Composite Key:外键列数错误

时间:2010-08-27 17:00:05

标签: java hibernate orm jpa foreign-keys

我是Hibernate和JPA的新手,我很难设置如下定义的复合键:

@Entity 
@Table(name = Entity.TABLE) 
@IdClass(EntityPK.class) 
public class MyEntity extends Entity {

        @CollectionOfElements
        @JoinTable(name="items",
            joinColumns = @JoinColumn(name="items"))
        private List<String> items;

        @Id
        private Type type;

        @Id
        private Level level;
   // plus standard constructors/getters/setters
}


public class EntityPK implements Serializable {

    private Type type;

    private Level level;

   // plus standard constructors/getters/setters
}

当我运行dbunit测试时,出现以下错误:

  

引起:org.hibernate.AnnotationException:从com.tnt.sech.domain.management.ReasonList引用com.tnt.sech.domain.management.ReasonList的外键具有错误的列数。应该是2

如果你能看到我出错的地方,请发帖!

1 个答案:

答案 0 :(得分:3)

在我看来,问题在于你不能使用复杂类型,如TypeLevel(不确定它们是什么)作为复合键的字段或属性。从JPA规范:

  

2.1.4主键和实体标识

     

...

     

主键(或字段或属性   一个复合主键)应该是   以下类型之一:任何Java   原始类型;任何原始包装器   类型; java.lang.String;   java.util.Date; java.sql.Date 即可。在   但是,一般是近似数字   类型(例如,浮点类型)   永远不应该在主键中使用。   主键使用类型的实体   除了这些将不可携带。   如果使用生成的主键,   只有整体类型才能携带。   如果使用java.util.Date作为   主键字段或属性,   时间类型应指定为   DATE

它们到底是什么(枚举?)?

除此之外,映射复合键本身的方法还可以(参见下面的相关问题)。

相关问题