java - 扩展 JPA 实体以添加属性和逻辑

标签 java hibernate jpa composition

我需要知道是否可以通过扩展将一些属性和行为添加到某些 POJO JPA 实体(使用 hibernate 提供程序),然后使 entityManager 返回扩展对象而不仅仅是 pojo实体,如以下示例:

POJO JPA 实体类

@Entity
@Table("test")
public class Test implements Serializable {
}

扩展类

public class ExtendedTest extends Test {
...
}

获取扩展类的对象

List<ExtendedTest> extendedList = entityManager.createNamedQuery("ExtendedTest.findByFoo").setParameter("foo", "bar").getResultList();

我正在评估的另一种可能的方式是使用复合实体扩展功能并委托(delegate)所有 setter 和 getter,但这可能意味着需要大量工作才能处理巨大的表:

public class ExtendedTest2 {
    private Test test;

    public ExtendedTest2(Test test) {
        this.test = test;
    }

    public getFoo() {
        return test.getFoo();
    }

    public getBar() {
        return test.getBar();
    } 

    ...
}

如有任何建议,我们将不胜感激。

最佳答案

使用@Inheritance

@Entity
@Table(name="TEST")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Test {
    ...
}

@Entity
public class ExtendedTest 
    extends Test {
    ...
}  

@MappedSuperclass

@MappedSuperclass
public class Test {
    ...
}

@Entity
public class ExtendedTest 
    extends Test {
    ...
}

关于java - 扩展 JPA 实体以添加属性和逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12570251/

相关文章:

java - 一对一和多对一实体关系之间是否存在实现差异?

java - Java 8 中的 MetaSpace 有什么用?

java - 使用 Robolectric 测试 Android 库

java - 我是否需要添加许多方法,或者是否可以调用一种方法

java - 错误 数据库锁获取失败(带有嵌入式 hsqldb 的 Hibernate )

hibernate - 为什么 JPA 不为延迟加载的关系提供 loadChildren() 方法?

java - hibernate 以持久保存日期

java - DB2 Dialect 代替 H2Dialect

java - 如何在 Java、JPA 中返回 Map<String, Object>?

java - 使用 IntelliJ IDEA 设置 JUnit