当前位置: 首页 > 面试题库 >

使用JPA(+ Hibernate)继承的抽象类

傅越
2023-03-14
问题内容

您将如何在以下示例代码中配置注释?我只想保留JPA注释,避免使用Hibernate特定的依赖项。 下面的代码正确吗?

@Entity
public class RefExample extends RefData {

}

(这些类将具有多个版本,RefSomeOtherExample等,并且每个类一个db表。有些可能会添加其他字段(列),但大多数只会使用继承自“
RefData”基类的基本字段。)

基类:

@Entity
public abstract class RefData {

    private long id;
    private String code;
    private String desc;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(unique = true, nullable = false)
    public long getId() {

        return id;
    }

    public void setId(long id) {

        this.id = id;
    }

    @Column(unique = true, nullable = false, length=8)
    public String getCode() {

        return code;
    }

    public void setCode(String code) {

        this.code = code;
    }

    @Column(unique = true, nullable = false, length=80)
    public String getDesc() {

        return desc;
    }

    public void setDesc(String desc) {

        this.desc = desc;
    }
}

最终,我想使用Hibernate的SchemaExport类从中生成模式创建脚本。在上述情况下,这两个类仅应导致创建一个名为“
RefExample”的表,其中包含“ RefData”中的三列。这样行吗?


问题答案:

根据JPA 1.0规范:

抽象类和具体类都可以是实体。 抽象类和具体类均可使用Entity批注进行批注 ,映射为实体,并作为实体进行查询。

实体可以扩展非实体类,非实体类可以扩展实体类

如果需要单个表,则应使用“
单个表”继承。

只需定义一个鉴别符列,如下所示:

@Entity
@DiscriminatorColumn(name="REF_TYPE")
public abstract class RefData {

但是,如果您不想依赖JPA继承策略,则可以改用MappedSuperclass:

@MappedSuperclass
public abstract class RefData {

JPA规范

实体可以从提供持久实体状态和映射信息的超类继承,但它本身不是实体。通常,这种映射超类 的目的 是定义多个实体类共有的状态和映射信息

请记住, 您不能同时 使用@Entity和@MappedSuperclass。



 类似资料:
  • 问题内容: 我的数据模型代表法人实体,例如企业或个人。两者都是纳税实体,都具有TaxID,电话号码和邮件地址的集合。 我有一个Java模型,其中有两个扩展抽象类的具体类。抽象类具有两个具体类共有的属性和集合。 我正在 MySQL* 数据库上使用 Hibernate JPA注释,其类如下: * 问题是,和对象需要参考他们的主人,这是一个。hibernate抱怨: 看来这将是一个相当普遍的Java继承

  • 我的代码: 问题:“

  • 我有一个关于JPA中继承的问题,是否可以使用JOINED策略来实现这个层次结构? 这是我的代码: 在上面的层次结构之后,我尝试使用JPQL进行查询,这是查询: 此代码从主代码运行 当我运行该查询时,会抛出以下错误 导致原因:com . MySQL . JDBC . exceptions . JDBC 4 . MySQL syntaxerrorexception:未知列“employee1_。“字段

  • 问题内容: 我们对PostgreSQL中的继承以及在JPA中将其映射为实体存在疑问。我们的数据库和我们要映射的表是: 我们在Netbeans 7.1.2中使用自动工具将它们映射到实体。起初我认为仅添加就足够了 因此,它只是 扩大了 ,但无法正常工作。最好的方法是什么?提前致谢。 问题答案: JPA的继承概念基于普通表。它并没有真正“理解” PostgreSQL表继承的想法。这是使用旨在暴露功能的最

  • 继承一个可以实现的普通超类有什么不同吗? atm我有一个名为的抽象类,我有/扩展这个。 abstractcar中的一个字段设置为"私有int容量" 但是在子类“小型汽车”中,当我输入“容量”作为构造函数中使用的变量时,它说“容量在抽象汽车中有私有访问” 我想: > 子类继承超类的所有字段和方法? 我现在该怎么进行?

  • 我有一个抽象类,这个类是在她的子类中扩展的: < li >我在这个抽象类上实现了一个方法,并抽象了另一个方法 < li >实现的方法是每个子类对象都必须访问的通用方法。所以我决定在抽象类上实现它,避免在每个子类上实现相同的方法。 小例子: 我想听听你对这种实施方式的看法, 问候。