Бесполезно загрузить вложенные ленивые коллекции в пружинную партию с параллельной обработкой куски и совокупным элементJAVA

Программисты JAVA общаются здесь
Anonymous
Бесполезно загрузить вложенные ленивые коллекции в пружинную партию с параллельной обработкой куски и совокупным элемент

Сообщение Anonymous »

Я работаю с шагом весеннего партии, который обрабатывает куски в parallel . На шаге используется пользовательский Aggregate itemReader , который возвращает список объектов в Itemprocessor.
Каждая объект содержит вложенные списки @elementcollection . Эти коллекции лениво загружаются по умолчанию.
Я использую jpatransactionmanager для управления транзакциями и Simpleasynctaskexecutor для параллельного выполнения.
Проблема заключается LazyInitializationException .
Пример:
Entity:

Код: Выделить всё

@Entity
public class CustomerOrder {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

@ManyToOne
@JoinColumn(name = "order_id")
private Order order;

private boolean processed;

// Getters and setters omitted for brevity
}
Order Entity:
@ElementCollection ассоциации лениво загружаются по умолчанию.

Код: Выделить всё

@Entity
public class Order {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ElementCollection
@CollectionTable(name = "order_dates", joinColumns = @JoinColumn(name = "order_id"))
@Column(name = "date")
private List dates = new ArrayList();

@ElementCollection
@CollectionTable(name = "order_sizes", joinColumns = @JoinColumn(name = "order_id"))
@Column(name = "size")
private List sizes = new ArrayList();

// Getters and setters omitted for brevity
}
Reader Reader (агрегат):
bean :

Код: Выделить всё

@Bean
public AggregatePagingItemReader customerOrderAggregateItemReader(
EntityManagerFactory entityManagerFactory) {
JpaPagingItemReader itemReader = new JpaPagingItemReaderBuilder()
.name("customerOrderItemReader")
.entityManagerFactory(entityManagerFactory)
.queryString("SELECT co FROM CustomerOrder co")
.pageSize(100)
.build();
return new AggregatePagingItemReader(itemReader);
}
class:

Код: Выделить всё

public class AggregatePagingItemReader implements ItemStreamReader[*]> {
// Wraps a JpaPagingItemReader to return a full page as List instead of one item at a time.
}
Процессор элемента:

Код: Выделить всё

@Component
@StepScope
public class CustomerOrderItemProcessor implements ItemProcessor {

@Override
public List process(List customerOrders) throws Exception {
List newCustomerOrders = new ArrayList();
for (CustomerOrder customerOrder : customerOrders) {
CustomerOrder newCustomerOrder = new CustomerOrder();
newCustomerOrder.setName(customerOrder.getName());
newCustomerOrder.setProcessed(true);

Order order = customerOrder.getOrder();

Order newOrder = new Order();
newOrder.setDates(order.getDates()); // This line throws LazyInitializationException
newOrder.setSizes(order.getSizes());

newCustomerOrder.setOrder(newOrder);

newCustomerOrders.add(newCustomerOrder);
}
return newCustomerOrders;
}
}
witer writer:

Код: Выделить всё

@Component
@StepScope
public class CustomerOrderItemWriter implements ItemWriter {

private final JpaItemWriter jpaItemWriter;

public CustomerOrderItemWriter(EntityManagerFactory entityManagerFactory) {
jpaItemWriter = new JpaItemWriterBuilder()
.entityManagerFactory(entityManagerFactory)
.build();
}

@Override
public void write(Chunk

Подробнее здесь: [url]https://stackoverflow.com/questions/79579420/eagerly-load-nested-lazy-collections-in-spring-batch-with-parallel-chunk-process[/url]

Вернуться в «JAVA»