Расширение сущности JPA для добавления атрибутов и логики

Мне нужно знать, возможно ли добавить некоторые атрибуты и поведения к некоторой сущности POJO JPA (используя провайдера hibernate), расширив ее, а затем заставить entityManager возвращать расширенные объекты вместо просто сущностей pojo, как в следующих примерах:

POJO JPA Entity Class

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

Расширенный класс

public class ExtendedTest extends Test {
...
}

Извлечение объектов расширенного класса

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

Другой возможный способ оценки - расширение функциональности с помощью составной сущности и делегирование всех установщиков и получателей, но это может означать большую работу с огромными таблицами:

public class ExtendedTest2 {
    private Test test;

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

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

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

    ...
}

Любые предложения будут очень благодарны.

1 ответ

Решение

С помощью @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 {
    ...
}
Другие вопросы по тегам