ejecutar pruebas adicionales para verificar la última lógica de persistencia de la colección reactiva de los cambios de @OrderColumn # 581 . Se encontró con un problema al eliminar más de 1 elemento durante un flush ().
Ver: OrderedEmbeddableCollectionTest
Excepción: [Excepción 0] io.vertx.core.impl.NoStackTraceThrowable: El número de parámetros a ejecutar debe ser consistente con el número esperado de parámetros = [2] pero el número real es [3].
[Excepción 1] io.vertx.core.VertxException: transacción ya completada
Parece que la matriz Object [] de valores param devuelve un Object [3] en lugar de Object [2] para el segundo elemento eliminado en el nuevo resumen persister: https://github.com/hibernate/hibernate-reactive/blob/ fe9dfbaa07e4b71fe85e949a45ac23c91c26709b / hibernate-reactive-core / src / main / java / org / hibernate / reactive / persister / collection / impl / ReactiveAbstractCollectionPersister.java # L237
Podría valer la pena hacer que la prueba funcione en el núcleo de Hibernate ORM, solo para poder pasar y ver qué sucede allí.
En el deleteRows
ORM, el int offset = 1;
nunca cambia.
En Reactive, estamos pasando la compensación a la llamada deleteRowsParamValues( entry, index+1, id, session )
, que se basa en un index
incrementado de i
, index
, loc
y offset
en ORM.
El i
parece proporcionar métodos de actualización e inserción para saber en qué entrada de colección se está operando, por lo que no debe vincularse ni usarse en el proceso de eliminación.
Sí, parece que la lógica simplemente se transfirió incorrectamente.
Creo que solo cambiar index+1"
a 1
refleja la lógica ORM
¡Excelente!
¡Buena atrapada!
@blafond : te he asignado esto porque parece que ya tienes una solución
Gracias, @blafond