Как наследовать @Entity не mapped классом в Hibernate?

Необходима сущность Field, которую будут наследовать такие классы как SliderField, DateField и т.д., при этом они лишь выполняют функцию обертки и их данные из них уже хранит Field в виде ArrayList

Выглядит это так:
@Entity
class Field{

 public String val1;
// ...

public ArrayList<Data> data;

//...
}

class SliderField extends Field{
 public int min.max;

public void setMin(int m);
// ....
}

И вот в таком случае Hibernate ругается "Unknown entity: com.pkg.app.SliderField", хотя сам SliderField никаким образом не Mapped, а лишь передается в .persist после явного преобразования в Field
  • Вопрос задан
  • 190 просмотров
Пригласить эксперта
Ответы на вопрос 1
@bobzer
Java EE Developer
Если я правильно понимаю, все классы проецируются на одну таблицу. При этом Field содержит проекции тех полей таблицы, которые используются во всех классах, а наследники Field проецируют дополнительно специфические для них поля. В таком случае должна подойти следующая конструкция:

@MappedSuperclass
abstract class Field {
//...
}

@Entity
@Table(name = "FIELDS")
class SliderField extends Field {
//...
}

@Entity
@Table(name = "FIELDS")
class DateField extends Field {
//...
}

Основная Ваша ошибка в том, что аннотацией @Entity должны помечаться конечные классы, а не родительские. Промежуточные родительские классы при этом следует отметить как @MappedSuperclass.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы