Hibernate e SQLite

Introduzione

SQLite è una libreria software open source che implementa un DBMS di tipo ACID. Esso presenta diverse caratteristiche che lo rendono particolarmente adatto ad essere utilizzato per progetti che debbono gestire piccole quantità di dati, generalmente in ambienti monoutente, come ad esempio per una applicazione client. Non necessita infatti di attività di installazione ed è estremamente compatto, essendo interamente contenuto in un unico file.

Nel presente articolo vediamo come sia possibile utilizzare tale tecnologia con il framework Hibernate, che attualmente non la supporta in modo nativo. Per farlo riprendiamo l’esempio mostrato nel post Mapping delle Relazioni in Hibernate, modificandolo al fine utilizzare una base dati SQLite.

Il Dialetto

Per utilizzare una RDBMS con Hibernate abbiamo bisogno di due cose: il driver JDBC (vedi Accesso ai Database in Java con JDBC) e la classe che ne implementa il dialetto. Il dirver JDBC è disponibile sul repository Maven Central Repository e può quindi essere incluso del progetto maven attraverso la sua dependency:

Più complessa è invece la specifica del dialetto, che richiede l’estensione della classe org.hibernate.dialect.Dialect. Ovviamente Hibernate fornisce diverse implementazioni per i più comuni database, tutti contenuti nel package org.hibernate.dialect. L’elenco per la versione 5 è disponibile al link https://docs.jboss.org/hibernate/orm/5.0/javadocs/org/hibernate/dialect/package-summary.html. Sfortunatamente non ce ne è una per SQLite, quindi dobbiamo crearcela noi o frugare il web alla ricerca di qualcuno che lo abbia fatto per noi. Il risultato è dipendente dalla versione di Hibernate che vogliamo utilizzare:

Hibernate 3

URL: https://github.com/kemitix/sqlite-dialect

hibernate.dialect = org.hibernate.dialect.SQLiteDialect
 Hibernate 4  URL: https://github.com/EnigmaBridge/hibernate4-sqlite-dialect
hibernate.dialect = com.enigmabridge.hibernate.dialect.SQLiteDialect
 Hibernate 5  URL: https://github.com/gwenn/sqlite-dialect/

Non è presente su maven Central e, diversamente dai precedenti, non è stato testato da me.

Per il nostro esempio utilizzeremo la versione per Hibernate 4.

Configurazione del Progetto

Modifichiamo quindi il progetto presentato nel post Mapping delle Relazioni in Hibernate inserendo innanzitutto le dipendenze, nel pom.xml, ad Hibernate 4, al JDBC di SQLite ed infine al relativo dialetto:

Infine configuriamo Hibernate modificando il file hibernate.cfx.xml nel modo seguente:
Come ci si aspettava i parametri specifici per SQLite sono:

  • hibernate.connection.driver_class che indica il driver JDBC;
  • dilect (o hibernate.dialect) che identifica il dialetto;
  • hibernate.connection.url che indica in university.sqlite come file contenente il database.

Il file university.sqlite può essere creato con uno dei tool disponibili online (io ad esempio utilizzo DB Browser for SQLite) oppure possiamo lasciare che Hibernate lo crei per noi utilizzando la configurazione:

Attenzione ad utilizzare questa opzione perché in questo caso il file è generato nuovamente ad ogni avvio dell’applicazione, di fatto cancellando ogni dato precedentemente presente.

Infine nella cartella src/main/resources è stato inserito un file import.sql che è letto da Hibernate alla creazione della base dati ed eseguito. Tale opportunità è molto utile per eseguire uno script per la configurazione iniziale.

Codice Sorgente

Il codice sorgente dell’itero progetto è disponibile qui hb-sqlite.