Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Hibernate Session Rewrite

    Buona Sera a tutti, ho un problema con Hibernate. Riesco perfettamente a dialogare con MySql e scrivo i dati. Quando lancio un'altra instanza per la lettura di tali dati mi da l'insieme vuoto, come se la nuova sessione abbia riiscritto la tabella cancellando quelli precedenti.
    Come si risolve?
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    105
    Ciao Controlla se nel file hibernate.cfg.xml non ha un property che si chiama hbm2dll.auto e con il valore create, se hai quella li e normale lui ogni volta riscrive la tabella partendo dalla tua definizione.
    Tolto quello i dati non si cancelleranno piu. Per contro ogni nuovo oggetto-tabella dovrai crearla a mano..

    Dovrebbero esserci dei tool di reverse eng. che dalle tabelle generano i bean di hibernate.

    Ciao

  3. #3
    Ciao,
    se sei nuovo di Hibernate questo di default quando apre una connessione al database disabilita l'autocommit, per farti usare le transazioni.
    Vuol dire che tutte le modifiche al tuo database che esegui con i vari metodi dell'oggetto sessione (save, update, ecc..) avvengono solo in memoria in una cache fino a che non committi la transazione, la cache corrisponde all'oggetto sessione stesso, nuova sessione nuova cache.
    Un "pattern" generale per scrivere sul db con Hibernate è questo (vado a memoria ci possono essere errori)

    codice:
    Session session = null;
    Transaction tx = null;
    try {
        session = getSessionFactory().openSession(); //apro una sessione dal sessionfactory
        tx = session.beginTransaction();  // inizio transazione
    
        //qui lavoro sul db
        
        tx.commit(); //se non ci sono stati errori salvo tutto sul db
    } catch (Exception e) {
        tx.rollback(); //cancella le modifiche alla mia sessione
        // qui loggo l'errore
    } finally {
       if(session != null) session.close() //ho finito e posso chiudere
    }
    il vantaggio pesante è che se ci sono intoppi a metà del lavoro, con tx.rollback() "torni indietro" e non lasci il tuo db in uno stato inconsistente.
    Se proprio vuoi che hibernate scriva sul db ogni volta che fai un save, update ecc, (sconsigliato nella grande maggioranza dei casi) puoi mettere nel tuo file di configurazione:
    <property name="connection.autocommit">true</property>

    altre info sull'argomento (in inglese) le trovi qui: https://www.hibernate.org/403.html

  4. #4
    Grazie Tante Ragazzi. Ho risolto togliendo <property name="hibernate.hbm2ddl.auto">create</property>.
    In gamba

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.