У меня есть шаблон класса:
@Entity
@Table(name = "templates")
public class Template extends AbstractEntity {
private List<AbstractField> fields;
}
Он состоит из полей, и я получаю любые подобные викторины.
У меня есть сущности, которые наследуют AbstractField:
@Setter
@MappedSuperclass
public abstract class AbstractField extends AbstractEntity {
private FieldType fieldType;
private String title;
private Template template;
}
Как мы видим, у нас есть абстрактный класс полей (флажок, переключатель и т. Д.), И все поля расширяют это абстрактное поле, как показано ниже:
@Entity
@Table(name = "field_checkbox")
@Setter
@ToString
@EqualsAndHashCode(callSuper = true)
public class CheckBoxField extends AbstractField {
private Boolean selection = false;
}
Мне нужно связать поля с однимзависимость от многих.Я сделал это следующим образом:
@Entity
@Table(name = "appeal_templates")
public class Template<F extends AbstractField> extends AbstractEntity {
private List<F> fields;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "template")
public List<F> getFields() {
return fields;
}
}
Как мы видим, я решил сделать это с помощью generic.И я получаю исключение:
Причина: org.hibernate.AnnotationException: свойство ru.model.representation.appeal.template.Template.fields имеет несвязанный тип и не имеет явной целевой сущности.Решите эту проблему общего использования или установите явный целевой атрибут (например, @OneToMany (target =)) или используйте явный @ Type
Как я понимаю, Hibernate не позволяет сопоставить с универсальным. Но я планируюхранить много типов полей, расширенных AbstractField. Что делать?