我是 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(使用前将#替换为@)