executando testes adicionais para verificar a lógica persistente da coleção reativa mais recente das alterações de @OrderColumn # 581 . Tive um problema ao remover mais de 1 elemento durante um flush ().
Veja: OrderedEmbeddableCollectionTest
Exceção: [Exceção 0] io.vertx.core.impl.NoStackTraceThrowable: O número de parâmetros a serem executados deve ser consistente com o número esperado de parâmetros = [2], mas o número real é [3].
[Exceção 1] io.vertx.core.VertxException: Transação já concluída
Parece que a matriz Object [] de valores de parâmetros está retornando um Object [3] em vez de Object [2] para o segundo elemento excluído no novo persister abstrato: https://github.com/hibernate/hibernate-reactive/blob/ fe9dfbaa07e4b71fe85e949a45ac23c91c26709b / hibernate-reactive-core / src / main / java / org / hibernate / reactive / persister / collection / impl / ReactiveAbstractCollectionPersister.java # L237
Pode valer a pena fazer o teste funcionar no núcleo ORM do Hibernate, apenas para poder percorrer e ver o que acontece lá.
No deleteRows
do ORM, o int offset = 1;
nunca muda.
Em reativo, estamos passando o deslocamento para a chamada deleteRowsParamValues( entry, index+1, id, session )
, que é baseada em um index
incrementado de i
, index
, loc
e offset
no ORM.
O i
parece fornecer métodos de atualização e inserção para saber qual entrada da coleção está sendo operada, portanto, não deve ser vinculado a / usado no processo de exclusão.
Sim, parece que a lógica foi apenas portada de forma errada.
Acho que apenas mudar index+1"
para 1
reflete a lógica ORM
Excelente!
Boa pegada!
@blafond : Eu atribuí isso a você porque parece que você já corrigiu
Obrigado, @blafond