2012-01-04 29 views
9

Vorrei salvare gli oggetti persistenti nel file system utilizzando Hibernate senza la necessità di un database SQL.È possibile salvare oggetti persistenti nel file system

È possibile?

+0

Si intende non utilizzare Hibernate su un database SQL? – everton

+2

@EvertonAgner l'OP sembra voler utilizzare l'API di Hibernate per persistere su un filesystem, non su un database SQL. – mcfinnigan

+0

L'ibernazione è fondamentalmente uno strumento di mappatura relazionale dell'oggetto. Se non vuoi la parte relazionale, perché vuoi usare Hibernate? – skaffman

risposta

4

Hibernate funziona su JDBC, quindi tutto ciò che serve è un driver JDBC e un dialetto Hibernate corrispondente.

Tuttavia, JDBC è fondamentalmente un'astrazione di SQL, quindi qualsiasi cosa tu usi guarderà, camminerà e ciarlatta come un database SQL - potresti anche usarne uno e risparmiarti un sacco di mal di testa. Inoltre, qualsiasi soluzione di questo tipo sarà comparabile per dimensioni e complessità a DB Java leggeri come Derby.

Ovviamente se non si insiste assolutamente sull'utilizzo di Hibernate, ci sono molte altre opzioni.

+0

Che dire di sqlite, che è abbastanza vicino ai dati persistenti sul filesystem, anche se è fatto come un database SQL. –

+0

@bjarkef: sì, ma è scritto in C, quindi se volessi usarlo in un'applicazione Java avresti perso l'indipendenza dalla piattaforma (o dovresti includere più copie). –

+0

@Michael Borgwardt: ci sono in realtà i driver JDBC per SQLite, e c'è persino un dialetto Hibernate per questo. Tuttavia, non è consigliabile: l'implementazione è estremamente lenta rispetto ad altri database incorporati. – parasietje

-5

Naturalmente questo è possibile, si può semplicemente utilizzare il file IO caratteristiche di Java, seguendo i passi sono necessari: -

  1. creare un file oggetto 2.Creare un oggetto di FileInputStream (anche se ci sono modi che utilizzano Altre classi)
  2. Avvolgere questo oggetto in un oggetto Buffer o semplicemente all'interno di un java.util.Scanner.
  3. utilizzare le funzioni di scrittura specifiche dell'oggetto creato nel passaggio precedente.

Si noti che l'oggetto deve implementare l'interfaccia Serializable. See following link,

+7

Penso che l'intera idea alla base della domanda sia di farlo tramite l'API di Hibernate. –

+0

L'ho provato di recente nel mio progetto ma in qualche modo non sono stato in grado di trovare una soluzione per questo, quindi ho dovuto usare le mie basi del core java. Hibernate supporta la lettura da un file piatto ma la scrittura di oggetti su un file non è ancora supportata o non sono stato in grado di trovarne uno ... – aProgrammer

+0

Cari downvoters ... il coraggio di commentare !!! – aProgrammer

2

Sembra che ciò sia tecnicamente possibile se si utilizza un driver di testo in chiaro JDBC; tuttavia non ho visto alcun opensource che fornisca l'accesso in scrittura; quello che ho trovato su sourceforge è di sola lettura.

+0

C'è anche Ashpool, che utilizza file XML: http://wiki.robrohan.com/Ashpool.html – greyfairer

0

Non so exactaly il vostro bisogno, ma forse è una delle seguenti:

1 - Se la vostra necessità è gestita solo da SQL, è possibile utilizzare un database NoSQL.
Hibernate lo sospende tramite Hibernate OGM (http://www.hibernate.org/subprojects/ogm). Ci sono alcuni DB come Cassandra, MongoDB, CouchDB, Hadoop ... Hai qualche suggerimento Here .

2 - Ora, se non si desidera utilizzare un server di database (con un processo di servizio sempre in esecuzione), è possibile utilizzare Apache Derby. È un DB come qualsiasi altro SQL, ma non ha bisogno di un server. Usa un file singolare per conservare i dati. Puoi facilmente trasportare tutti i database con il tuo programma.
http://db.apache.org/derby/

3 - Se vuoi veramente un file di testo semplice, puoi fare come disse Michael Borgwardt. Ma non so se Hibernate sarebbe una buona idea in questo caso.

0

Entrambe H2 e HyperSQL supportano la modalità incorporata (in esecuzione all'interno della JVM anziché in un server separato) e il salvataggio su file locali; questi sono ancora database SQL, ma con Hibernate non ci sono molte altre opzioni.

2

Hai già un modello di entità, suppongo che tu non voglia perdere questo, né le relazioni contenute al suo interno. Un modello di entità è diretto per essere tradotto in un database relazionale.

Hibernate e qualsiasi altro provider JPA (EclipseLink) traducono questo modello di entità in SQL. Usano un driver JDBC per fornire una connessione a un database SQL. Questo, devi anche mantenerlo.

La domanda corretta da porre è: qualcuno conosce uno embedded Java SQL database, uno da cui è possibile iniziare da Java? Ci sono un sacco di quelli, menzionati in questo argomento:

  • HyperSQL: memorizza il risultato in un file di testo in chiaro SQL, facilmente importato in qualsiasi altro database
  • H2: utilizza file binari, bassa JAR dimensione del file
  • Derby: utilizza file binari
  • Ashpool: memorizza i dati in un file XML strutturato

ho usato HyperSQL su un progetto per i piccoli di dati, e Apache Derby per un progetto con i database enormi (2GB e più). Apache Derby offre prestazioni migliori su questi enormi database.

0

Bene, poiché la domanda è ancora aperta e l'OP ha detto che è aperto a nuovi approcci/suggerimenti, ecco il mio (un po 'tardi ma ok).

Lo sapevi Prevayler? È un'implementazione Java Prevalence che mantiene tutti i tuoi oggetti business nella RAM e mantiene Snapshots/Changelogs nel File System, in questo modo è estremamente veloce e affidabile, poiché in caso di crash, ripristina il suo ultimo stato e riapplica ogni modifica a esso.

Inoltre, è davvero facile da configurare ed eseguire nella tua app.

+0

Suoni davvero interessanti grazie: D – Corvusoft

Problemi correlati