У меня есть класс с именем AbstractEntity, который аннотируется @MappedSuperclass. Затем у меня есть класс с именем User (@Entity), который расширяет AbstractEntity. Оба они существуют в пакете с именем foo.bar.framework. Когда я использую эти два класса, все работает просто отлично. Но теперь я импортировал банку с этими файлами в другой проект. Я хотел бы повторно использовать класс User и расширить его несколькими дополнительными полями. Я думал, что @Entity public class User extends foo.bar.framework.User
подойдет, но я обнаружил, что эта реализация User наследует поля только от AbstractEntity, но ничего от foo.bar.framework.User. Вопрос в том, как заставить мой второй класс User наследовать все поля от первого класса сущности User?
Обе реализации класса User имеют разные имена таблиц, определенные с помощью @Table (name = "name").
Мои занятия выглядят так
package foo.bar.framework;
@MappedSuperclass
abstract public class AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@Column(nullable = false)
@Version
protected Long consistencyVersion;
...
}
package foo.bar.framework;
@Entity
@Table(name = "foouser")
public class User extends AbstractEntity {
protected String username;
protected String password;
....
}
package some.application;
@Entity
@Table(name = "myappuser")
public class User extends foo.bar.framework.User {
protected String firstname;
protected String lastname;
protected String email;
....
}
Используя приведенный выше код, EclipseLink создаст таблицу с именем «myappuser», содержащую поля «id», «consistencyVersion», «firstname», «lastname» и «email». Поля "username" и "password" не созданы для таблицы - вот с чем я столкнулся.