16

我需要知道是否可以通过扩展某些 POJO JPA 实体(使用休眠提供程序)来添加一些属性和行为,然后使 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();

我正在评估的另一种可能的方式是使用复合实体扩展功能并委托所有 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();
    } 

    ...
}

任何建议将不胜感激。

4

1 回答 1

34

使用@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 {
    ...
}
于 2012-09-24T18:22:50.843 回答