与 SINGLE_TABLE 继承的子类的关系

我将一些 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 中定义时它就起作用了,所以我想它应该与注释一起工作。


手掌心
浏览 66回答 1
1回答

鸿蒙传说

我终于知道是什么问题了。在hbm文件中,MapKey名称指的是列名称。但注释引用了字段名称。所以而不是@MapKey(name&nbsp;=&nbsp;"Id")我必须有@MapKey(name&nbsp;=&nbsp;"id")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java