2012-03-31 12 views
5

Soy novato en hibernación. Tengo una duda con respecto a las transacciones y el enrojecimiento ..Con respecto a la transacción de hibernación y vaciado

Siempre que queremos conservar un objeto, abrimos una sesión y comenzamos una transacción. después de persistir cuál de estos viene primero y el otro sigue ......

1) session.getTransaction.commit(); 2) session.flush()

De acuerdo con lo que he leído, commit() confirma los valores en la base de datos. flush() sincroniza el estado de los objetos en la base de datos.

cuál es la diferencia entre estos dos.

Respuesta

8

session.flush() realizará el proceso de enjuague que consiste en realizar una comprobación sucia para todos los objetos persistentes administrados por la sesión de hibernación.Si un objeto se considera sucio (es decir, cualquier valor del objeto almacenado en esa sesión de hibernación es diferente del registro correspondiente en la base de datos), hibernate emitirá ACTUALIZACIÓN SQL a la base de datos inmediatamente para sincronizar estas diferencias para hacer que el objeto almacenado en la sesión de hibernación tenga los mismos valores con el registro de la base de datos correspondiente.

Sin embargo, el solo hecho de emitir el UPDATE SQL no significa que los datos modificados se guarden realmente en el DB, usted tiene que COMPROMETER la transacción para confirmar el guardar los datos modificados en el DB en realidad. También significa que puede ROLLBACK los cambios realizados por el SQL de ACTUALIZACIÓN si se encuentran errores después de emitir el SQL de ACTUALIZACIÓN pero antes de confirmar la transacción.

El comportamiento de enjuague de una sesión de hibernación está determinado por los parámetros FlushMode que se pueden configurar por session.setFlushMode(). El valor predeterminado es FlushMode.AUTO de modo que session.flush() se produzca automáticamente antes de confirmar una transacción y la ejecución de la consulta.

Por lo tanto, cuando se llama session.getTransaction.commit() en el valor predeterminado FlushMode, session.flush() se ejecutará implícitamente antes de la ejecución de session.getTransaction.commit().

Cuestiones relacionadas