Hibernate 不将实体链接到通用

我有类模板:


@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;

    }

}

如我们所见,我决定使用通用的。我得到例外:


Caused by: org.hibernate.AnnotationException: Property ru.model.representation.appeal.template.Template.fields 具有未绑定类型且没有显式目标实体。解决此通用使用问题或设置明确的目标属性(例如@OneToMany(target=) 或使用明确的@Type


据我了解,Hibernate 不允许映射到泛型。但是我打算存储很多类型的字段,扩展了AbstractField。该怎么办?


慕勒3428872
浏览 68回答 1
1回答

慕无忌1623718

不可能为子类使用不同的表。检查此评论为什么您可以做的是定义单表继承类型:@Entity@Table(name = "fields")@Inheritance(strategy=InheritanceType.SINGLE_TABLE)public abstract class AbstractField extends AbstractEntity {&nbsp; &nbsp; private FieldType fieldType;&nbsp; &nbsp; private String title;&nbsp; &nbsp; private Template template;}然后你就可以List<AbstractField> fields在Template课堂上使用了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java