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?
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?
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.
Che dire di sqlite, che è abbastanza vicino ai dati persistenti sul filesystem, anche se è fatto come un database SQL. –
@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). –
@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
Naturalmente questo è possibile, si può semplicemente utilizzare il file IO caratteristiche di Java, seguendo i passi sono necessari: -
java.util.Scanner
.Si noti che l'oggetto deve implementare l'interfaccia Serializable
. See following link,
Penso che l'intera idea alla base della domanda sia di farlo tramite l'API di Hibernate. –
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
Cari downvoters ... il coraggio di commentare !!! – aProgrammer
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.
C'è anche Ashpool, che utilizza file XML: http://wiki.robrohan.com/Ashpool.html – greyfairer
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.
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:
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.
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.
Suoni davvero interessanti grazie: D – Corvusoft
Si intende non utilizzare Hibernate su un database SQL? – everton
@EvertonAgner l'OP sembra voler utilizzare l'API di Hibernate per persistere su un filesystem, non su un database SQL. – mcfinnigan
L'ibernazione è fondamentalmente uno strumento di mappatura relazionale dell'oggetto. Se non vuoi la parte relazionale, perché vuoi usare Hibernate? – skaffman