Quina diferència hi ha entre els mètodes flush () i save () en hibernar (java)?


Resposta 1:

Hibernar guardar () es pot fer servir per desar l'entitat a la base de dades. Podem invocar aquest mètode fora d’una transacció, per això no m’agrada aquest mètode per desar dades. Si utilitzem això sense transaccions i tenim cascada entre entitats, només l’entitat primària es desa si no fem la sessió.

flush (): obliga la sessió a encendre. S'utilitza per sincronitzar les dades de sessió amb base de dades.

Quan truqueu session.flush (), les instruccions s’executen a la base de dades, però no es faran efectives. Si no truqueu session.flush () i si truqueu session.commit (), el mètode commit () internament executa la sentència i es compromet.

Així, commit () = flush + commit.So seeion.flush () només executa les declaracions a la base de dades (però no commits) i les declaracions ja no són a MEM INRIA. Només obliga la sessió a colar.

Pocs punts importants:

  • Hauríem d’evitar guardar fora del límit de les transaccions, en cas contrari, no s’estalviaran les entitats mapejades provocant inconsistència de dades. És molt normal oblidar el fet d’enxampar la sessió perquè no llança cap excepció ni cap advertiment. Per defecte, Hibernate presentarà automàticament els canvis per vosaltres: abans d’algunes execucions de consultes quan s’hagi realitzat una transacció. Permetre que la sessió finalitzi explícitament dóna un control més fi que pot ser requerit. en algunes circumstàncies (per obtenir un identificador per controlar la mida de la sessió)

Resposta 2:

La funció principal de la sessió és oferir operacions de creació, lectura i eliminació per a instàncies de classes d'entitats mapejades. Es poden presentar instàncies en un dels tres estats:

transitòries: mai persistents, no associades a cap sessió

persistent: associat a una sessió única

separat: anteriorment persistent, no associat a cap sessió

Rubor

void flush () llança HibernateException

Força aquesta sessió a batre. S'ha de trucar al final d'una unitat de treball abans de realitzar la transacció i tancar la sessió (depenent del mode flush, Transaction.commit () truca a aquest mètode).

Flushing és el procés de sincronització del magatzem persistent subjacent amb un estat persistent en memòria.

Llança:

HibernateException: indica problemes amb la sessió o la conversa amb la base de dades.

Desa

session.save () -> Aquest mètode s'utilitza per guardar una entitat / objecte a la base de dades i retornar un identificador generat. Llançarà una excepció si una entitat ja existeix a la base de dades.

Font: - Sessió (Hibernar JavaDocs)


Resposta 3:

En paraules laiques:

Flush () s'assegura que les instruccions SQL que genera Hibernate són realment enviades a la base de dades.

Save () diu essencialment: guardeu aquesta entitat a la base de dades, genereu algunes declaracions sql, però l’operació save () * pot no * ser instantània, és a dir, no és una garantia que es faci immediatament (vegeu la resposta de Mohan Rathour com per què, transaccions, etc).