Можете помочь разобраться с подгрузкой атрибутов сущностей через fetch-plan на экране?
Я добавил новый класс Order
:
@Table(name = "ORDER_", indexes = {
@Index(name = "IDX_ORDER__REF_CUSTOMER", columnList = "REF_CUSTOMER_ID")
})
@Entity(name = "Order_")
public class Order {
@JmixGeneratedValue
@Column(name = "ID", nullable = false)
@Id
private UUID id;
@Column(name = "VERSION", nullable = false)
@Version
private Integer version;
@InstanceName
@Column(name = "NAME")
private String name;
@OnDeleteInverse(DeletePolicy.CASCADE)
@JoinColumn(name = "REF_CUSTOMER_ID")
@ManyToOne(fetch = FetchType.LAZY)
private Customer refCustomer;
// Геттеры и сеттеры
// ...
}
А в класс Customer
добавил соответствующую связь:
private List<Order> refOrders;
public List<Order> getRefOrders() {
return refOrders;
}
public void setRefOrders(List<Order> refOrders) {
this.refOrders = refOrders;
}
Создал fetch-plans:
<fetchPlans xmlns="http://jmix.io/schema/core/fetch-plans">
<fetchPlan entity="Order_" name="order-fetch-plan" extends="_base">
<property name="refCustomer" fetchPlan="_base"/>
</fetchPlan>
<fetchPlan entity="Customer" name="customer-fetch-plan" extends="_base">
<property name="refOrders" fetchPlan="_base"/>
</fetchPlan>
</fetchPlans>
Теперь в клиенте создал DTO Order
и добавил новое поле в Customer
:
@Store(name = "serviceapp")
@RestDataStoreEntity(remoteName = "Order_")
public class Order {
@JmixGeneratedValue
@JmixId
private UUID id;
private Integer version;
@InstanceName
private String name;
@OnDeleteInverse(DeletePolicy.CASCADE)
private Customer refCustomer;
// Геттеры и сеттеры
// ...
}
@JmixEntity
@Store(name = "serviceapp")
public class Customer {
@JmixGeneratedValue
@JmixId
private UUID id;
private Integer version;
@InstanceName
private String name;
private String email;
private List<Order> refOrders;
// Геттеры и сеттеры
// ...
}
Проблема:
При отображении данных в экране поле order.refCustomer
не подгружается. И при обращение к полю customer.refOrders
. И появляется ошибка io.jmix.restds.exception.InvalidFetchPlanException: Data store 'serviceapp' supports only named fetch plans defined in fetch plans repository
.
Вопрос:
Как правильно работать с fetch-plan на стороне клиента? И еще можете подсказать, какие аннотация в клиенте нужно убирать из атрибутов сущности?
Пример экрана на клиенте:
<window xmlns="http://jmix.io/schema/ui/window"
xmlns:c="http://jmix.io/schema/ui/jpql-condition"
caption="msg://orderBrowse.caption"
focusComponent="ordersTable">
<data readOnly="true">
<collection id="ordersDc"
class="com.company.serviceapp.entity.Order">
<fetchPlan extends="_base">
<property name="refCustomer" fetchPlan="_base"/>
</fetchPlan>
<loader id="ordersDl">
<query>
<![CDATA[select e from Order_ e]]>
</query>
</loader>
</collection>
</data>
<facets>
<dataLoadCoordinator auto="true"/>
<screenSettings id="settingsFacet" auto="true"/>
</facets>
<layout expand="ordersTable" spacing="true">
<filter id="filter" dataLoader="ordersDl">
<properties include=".*"/>
</filter>
<groupTable id="ordersTable"
width="100%"
dataContainer="ordersDc">
<columns>
<column id="name"/>
<column id="refCustomer"/>
</columns>
<!-- ... -->
</groupTable>
</layout>
</window>