Импорт из json в спецификацию таблицы, модуль Data-Import

Необходимо импортировать данные в спецификацию сущности SpPrice из внешнего источника.
Воспользовался модулем Data-import.
Импорт производиться, однако ссылка на вышестоящую таблицу не проставляется.
Пример конфигурации:

ImportConfiguration importConfig = ImportConfiguration.builder(SpPrices.class, InputDataFormat.JSON)
.addSimplePropertyMapping(“code”, “code”)
.addSimplePropertyMapping(“name”, “name”)
.addSimplePropertyMapping(“price”, “price”)
.addSimplePropertyMapping(“price_opt”, “price_opt”)
.addSimplePropertyMapping(“barcode”, “barcode”)
.withEntityInitializer(entity → {
SpPrices spPrices = (SpPrices) entity;
System.out.println("CUR entity "+entity);
System.out.println("CUR PRICE: “+pricesDc.getItem());
spPrices.setRef_price(pricesDc.getItem());
spPrices.setNpp(777);
System.out.println(” cur Spprice ref spprice: “+spPrices.getRef_price().getId());
System.out.println(” cur Spprice npp spprice: "+spPrices.getNpp());
})
.withTransactionStrategy(ImportTransactionStrategy.SINGLE_TRANSACTION)
.build();

в логи значения выводяться, однако в базе данных проставляется только поле npp = 777, а ссылка ref_price - пуста.

CUR entity com.company.appjmix.entity.prices.SpPrices-a442e665-0562-252d-1221-f99c1a8bda45 [new]
CUR PRICE: com.company.appjmix.entity.prices.Prices-d7f37a24-3e39-9712-380b-881a1ab3df96 [detached]
cur Spprice ref price: d7f37a24-3e39-9712-380b-881a1ab3df96
cur Spprice ref price: 777

Как заполнить ссылочное поле по умолчанию при импорте?

Так же на гитхабе в документации отсутсвует пример “withEntityInitializer”.

Добрый день, @timaskraft.

На данную проблему заведен тикет Referenced property value is not set for imported entity if it is set in entityInitializer · Issue #1336 · jmix-framework/jmix · GitHub.
В качестве решения проблемы можно предложить добавление явного маппинга для атрибута “ref_price”:
Например,

    ImportConfiguration importConfig = ImportConfiguration.builder(SpPrices.class, InputDataFormat.JSON)
            .addSimplePropertyMapping("code", "code")
            .addSimplePropertyMapping("name", "name")
            .addSimplePropertyMapping("price", "price")
            .addSimplePropertyMapping("price_opt", "price_opt")
            .addSimplePropertyMapping("barcode", "barcode")
            .addCustomPropertyMapping("ref_price", customMappingContext -> pricesDc.getItem()) //added mapping, need to set correct property name
            .withEntityInitializer(entity -> {
                SpPrices spPrices = (SpPrices) entity;  
                spPrices.setNpp(777);
            })
            .withTransactionStrategy(ImportTransactionStrategy.SINGLE_TRANSACTION)
            .build();  
1 симпатия

Спасибо, все получилось.
так же, добавил автонумерацию для поля “номер по порядку”.
AtomicInteger npp= new AtomicInteger();

.addCustomPropertyMapping(“npp”, customMappingContext → npp.incrementAndGet() )

1 симпатия