Расширение сущности 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 {
...
}