您好我有以下课程:
public class OrderTemplate {
<other fields>
@OneToMany(mappedBy = "orderTemplate", cascade = CascadeType.ALL)
@Column(name="order_template_input")
private Set<OrderTemplateInput> orderTemplateInputs;
}
现在我有这样的抽象类orderTemplateInput:
public abstract class OrderTemplateInput {
<other fields>
@Column(name="text", nullable = false)
protected String text;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "order_template_id")
@JsonIgnore
protected OrderTemplate orderTemplate;
}
两个课程扩展了这一个:
public class OrderTemplateTextInput extends OrderTemplateInput {
@JsonProperty(value="type")
public OrderTemplateInputType getType() {
return OrderTemplateInputType.TEXT;
}
}
这一个:
public class OrderTemplateSelectInput extends OrderTemplateInput {
@OneToMany(mappedBy = "orderTemplateSelectInput", cascade = CascadeType.ALL)
private Set<InputValue> inputValues;
@JsonProperty(value="type")
public OrderTemplateInputType getType() {
return OrderTemplateInputType.SELECT;
}
}
首先,我想避免使用fetchType.Eager。所以我想通过关联集合获取所有orderTemplate。我有以下hql查询:
@Query("SELECT distinct o FROM OrderTemplate o JOIN FETCH o.orderTemplateInputs JOIN FETCH o.orderTemplateInputs oIn JOIN FETCH oIn.inputValues")
当OrderTemplate只有OrderTemplateTextInput的集合时,它只在一种情况下不起作用。在OrderTemplate列表中,只有OrderTemplate与OrderTemplateSelectInput以及select和text。如何查询以获取所有关联集合?