Java Hibernate不会将实体链接到泛型
我有一个类模板:Java Hibernate不会将实体链接到泛型,java,hibernate,Java,Hibernate,我有一个类模板: @Entity @Table(name = "templates") public class Template extends AbstractEntity { private List<AbstractField> fields; } 如我们所见,我们有一个字段的抽象类(复选框、单选按钮等)&所有字段都扩展了这个抽象字段,如下所示: @Entity @Table(name = "field_checkbox") @Setter @ToString @
@Entity
@Table(name = "templates")
public class Template extends AbstractEntity {
private List<AbstractField> fields;
}
如我们所见,我们有一个字段的抽象类(复选框、单选按钮等)&所有字段都扩展了这个抽象字段,如下所示:
@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;
}
}
@实体
@表(name=“上诉模板”)
公共类模板扩展了抽象实体{
私有列表字段;
@OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL,mappedBy=“template”)
公共列表getFields(){
返回字段;
}
}
正如我们看到的,我决定用泛型。我得到一个例外:
原因:org.hibernate.AnnotationException:属性 ru.model.representation.appeal.template.template.fields具有未绑定的 类型,并且没有显式的目标实体。解决此通用用法问题 或者设置一个显式的目标属性(例如@OneToMany(target=),或者使用 显式@Type
据我所知,Hibernate不允许映射到泛型。但我计划存储许多类型的字段,扩展的AbstractField。该怎么办?不可能为子类使用不同的表 您可以定义单表继承类型:
@Entity
@Table(name = "fields")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public abstract class AbstractField extends AbstractEntity {
private FieldType fieldType;
private String title;
private Template template;
}
然后你可以在
模板类中使用列表字段。你可以使用列表字段
我尝试过,结果是相同的exception.org.hibernate.AnnotationException:使用一个omany或多个omany来定位一个未映射的类没有看到你有两个不同的表,请参阅下面我的答案。
@Entity
@Table(name = "fields")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public abstract class AbstractField extends AbstractEntity {
private FieldType fieldType;
private String title;
private Template template;
}