@orderby hibernate:错误:表的from子句条目丢失

5fjcxozz  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(498)

所以我有三个实体。一 FormCollection 包含多个 Form . 这个 Form 是从模板创建的,因此与 FormTemplate .

@Table(name = "form_collection", schema = "public")
public class FormCollectionDO extends BaseAuditableDO {
    @OneToMany(mappedBy = "formCollection")
    @OrderBy("formTemplate.templateId") //throws error
    private List<FormDO> forms = new ArrayList<>();
}

@Table(name = "form", schema = "public")
public class FormDO extends BaseAuditableDO {

    @NotNull
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "form_template_id")
    private FormTemplateDO formTemplate;
}

@Table(name = "form_template", schema = "public")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class FormTemplateDO extends BaseDO {

    @Column(name = "template_id", nullable = false)
    @NotNull
    private Long templateId;
}
``` `@OrderBy("formTemplate.templateId")` 引发错误:
o、 h.engine.jdbc.spi.sqlexceptionhelper:错误:表“formtemplate”的子句条目中缺少 `@OrderBy("formTemplate.id")` 很好用。id来自抽象类 `BaseDO` . 为什么它不适用于 `FormTemplateDO` 上课?
u59ebvdq

u59ebvdq1#

虽然我不确定这个解决方案,但我怀疑这个问题的发生是因为 formTemplate.templateId 确实不是你的问题的一部分。
我看到你在用 @OneToMany 用于定义关系,但在hibernate中,默认的fetchmode是 SELECT 这意味着orderby参数不是查询的一部分。要使此参数成为查询的一部分,必须进行联接查询。
试试这个-

@Fetch(value = FetchMode.JOIN) 
@OneToMany(mappedBy = "formCollection")
@OrderBy("formTemplate.templateId") //throws error
private List<FormDO> forms = new ArrayList<>();

并将这种结合推广到更高的层次。也许能解决你的问题。

相关问题