为了账号安全,请及时绑定邮箱和手机立即绑定

与 SINGLE_TABLE 继承的子类的关系

与 SINGLE_TABLE 继承的子类的关系

手掌心 2023-09-20 17:04:16
我将一些 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")


查看完整回答
反对 回复 2023-09-20
  • 1 回答
  • 0 关注
  • 65 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信