Hibernate 复合键:外键的列数错误

2024-04-21

我是 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

如果您能看到我错在哪里,请发帖!


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

2.1.4 主键和实体身份

...

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

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

除此之外,映射组合键本身的方法也可以(请参阅下面的相关问题)。

相关问题

  • 如何使用 Hibernate 映射组合键? https://stackoverflow.com/questions/3585034/how-to-map-a-composite-key-with-hibernate/3588400#3588400
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate 复合键:外键的列数错误 的相关文章

随机推荐