`@ BatchSize` не работает для меня с объектами MxN - PullRequest
0 голосов
/ 28 января 2020

У меня есть объекты A -> C <- B, в типичном соотношении MxN, где C имеют составной PK. Проблема в том, что независимо от определенного @BatchSize код: </p>

repository.findAllById(aIds).forEach(e->e.getCs().stream().map(f->f.getPk().getB()).collect(Collectors.toList()));

будет весело go в дБ для каждой отдельной ассоциации. (приведенный выше код иллюстративный, может содержать опечатку; пожалуйста, просто учтите, что при каждом совпадении e происходит совпадение, но да, при преобразовании используются потоки). Это почему? cs равно oneToMany, таким образом, ленив, и указано @BatchSize. Все A экземпляры загружаются перед любым доступом к ленивым ассоциациям. Таким образом, в момент первого доступа должны быть видимые кандидаты для пакетной загрузки, однако он загружается 1 на 1.

Что может быть не так?

внутри A:

@BatchSize(size = 500)
@Setter(AccessLevel.NONE)
@Builder.Default
@OneToMany(mappedBy = "a", orphanRemoval = true, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JsonManagedReference
private List<C> cs = new LinkedList<>();

внутри C:

@EmbeddedId
private PK pk;

@ManyToOne
@JoinColumn(name = "a")
@MapsId("a")
@EqualsAndHashCode.Exclude
@JsonBackReference
@Type(type="uuid-char")
private A a;

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
@Embeddable
@EqualsAndHashCode
public static class PK implements Serializable {
    @Type(type="uuid-char")
    private UUID a;
    private String b;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...