所以我有三个实体。一 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` 上课?
1条答案
按热度按时间u59ebvdq1#
虽然我不确定这个解决方案,但我怀疑这个问题的发生是因为
formTemplate.templateId
确实不是你的问题的一部分。我看到你在用
@OneToMany
用于定义关系,但在hibernate中,默认的fetchmode是SELECT
这意味着orderby参数不是查询的一部分。要使此参数成为查询的一部分,必须进行联接查询。试试这个-
并将这种结合推广到更高的层次。也许能解决你的问题。