我将一些 hbm 配置翻译为带注释的 java 类。在 hbm 中,一些类是使用继承策略“SINGLE_TABLE”定义的,并且其他一些实体以多对一关系将其引用为 Map。当我尝试启动该应用程序时,出现以下错误:Caused by: org.hibernate.AnnotationException: Map key property not found: com.package.MyClass.Id我在网上搜索了一些解释,但没有同时描述这种情况下的 SINGLE_TABLE 继承策略和 OneToMany 行为。我的父类如下:@Entity@Table(name = "parentclass")@Inheritance(strategy = InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name = "type", length = 10, discriminatorType = DiscriminatorType.INTEGER)@DiscriminatorValue("100")public abstract class ParentClass { @Id @Column(name = "Id", length = 11) @GeneratedValue(strategy=GenerationType.AUTO) private Integer id; ....}子班:@Entity@DiscriminatorValue("2")public abstract class ChildClass { ....}具有以下关系的类:@Entity@Table(name = "otherclass")@PrimaryKeyJoinColumn(name = "IdSys")public class OtherClass extends OtherParent { .... @OneToMany @JoinColumn(name = "IdOther") @MapKey(name = "Id") @Where(clause = "type = 2") private Map<String, ChildClass> childClassMap; ....}当它在 hbm 中定义时它就起作用了,所以我想它应该与注释一起工作。
1 回答
鸿蒙传说
TA贡献1865条经验 获得超7个赞
我终于知道是什么问题了。
在hbm文件中,MapKey名称指的是列名称。但注释引用了字段名称。
所以而不是
@MapKey(name = "Id")
我必须有
@MapKey(name = "id")
添加回答
举报
0/150
提交
取消