В настоящее время я пишу новый Java-проект с Play Framework 2.2.2 на Ubuntu. Я пытаюсь создать очень простую иерархию классов, которая позволит различным db-persistable элементам наследовать общие поля, такие как id, created_at, deleted_at и т. Д., Из одного общего класса BaseEntity, чтобы избежать необходимости переписывать одну и ту же плиту котла.EBean в Java - Наследование с помощью @MappedSuperclass
Пример, с которым я сейчас работаю, выглядит следующим образом.
@Entity
public class User extends BaseEntity {
@Id
public int id;
@Constraints.Required
public String email;
@Constraints.Required
public IUser.Status status;
public String activationCode;
public User()
{
...
}
}
Для эксперимента я создал простой базовый класс с одним новым атрибутом, именем. Это компилируется нормально:
@MappedSuperclass
public abstract class BaseEntity extends Model {
protected String name;
public String getName()
{
return this.name;
}
public void setName(String value)
{
this.name = value;
}
public BaseEntity()
{
}
}
Теперь, когда класс BaseEntity не содержит поле имени или GetSet-ERS, EBean может успешно сохранить Entity в БД. Как только я добавил поле с геттерами и сеттерами, при попытке сохранить объект Play разбился со следующим исключением:
java.lang.NoSuchMethodError: models.User._ebean_getni_name() Ljava/lang/String; в models.User._ebean_getField (User.java:1) в com.avaje.ebeaninternal.server.reflect.EnhanceBeanReflect $ Getter.get (EnhanceBeanReflect.java:162) .....
Удаление GetSet или переместить их в базовый класс, приведет к тому же исключению. Я выглядел довольно неутомимо онлайн для примеров, которые показывают, что я делаю неправильно, но не нашли ничего, что исправляет его. Я уверен, что это что-то довольно простое. Может ли кто-нибудь помочь?
С уважением.
Спасибо, я думаю, это может быть связано с компиляцией проблем - когда я вручную добавил свойства, которые он отсутствовал, например. _ebean_getni_name скомпилировано. Я думаю, что они предназначены для создания автоматически генерируемых свойств, которые по какой-то причине не генерировались должным образом для базового класса. Модификатор доступа не имел никакого значения. Перейдем к более простой и менее проблематичной ORM на данный момент! – mistakenot