gpt4 book ai didi

java - 与 SINGLE_TABLE 继承的子类的关系

转载 作者:行者123 更新时间:2023-11-29 15:36:27 27 4
gpt4 key购买 nike

我将一些 hbm 配置翻译为带注释的 java 类。在 hbm 中,一些类是使用继承策略“SINGLE_TABLE”定义的,并且其他一些实体以多对一关系将其引用为 Map。

当我尝试启动应用程序时,出现以下错误:
引起:org.hibernate.AnnotationException:找不到映射键属性: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 中定​​义时它就起作用了,所以我想它应该与注释一起工作。

最佳答案

终于知道问题出在哪里了

在hbm文件中,MapKey名称指的是列名称。但注释引用了字段名称。

所以而不是

@MapKey(name = "Id")

我必须有

@MapKey(name = "id")

关于java - 与 SINGLE_TABLE 继承的子类的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58202898/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com