2012-01-04 11 views
9

Me gustaría guardar objetos persistentes en el sistema de archivos utilizando Hibernate sin la necesidad de una base de datos SQL.Es posible guardar objetos persistentes en el sistema de archivos

¿Esto es posible?

+0

¿Quiere decir que no utiliza Hibernate en una base de datos SQL? – everton

+2

@EvertonAgner OP parece querer usar la API de Hibernate para persistir en un sistema de archivos, no en una base de datos SQL. – mcfinnigan

+0

Hibernate es fundamentalmente una herramienta de mapeo relacional de objetos. Si no quieres la parte relacional, ¿por qué quieres usar Hibernate? – skaffman

Respuesta

4

Hibernate funciona en la parte superior de JDBC, por lo que lo único que necesita es un controlador JDBC y un dialecto Hibernate coincidente.

Sin embargo, JDBC es básicamente una abstracción de SQL, así que cualquier cosa que use se verá, caminará y graznará como una base de datos SQL; también podría usar uno y ahorrarse muchos dolores de cabeza. Además, cualquier solución de este tipo será comparable en tamaño y complejidad a las bases de datos ligeras Java como Derby.

Por supuesto, si no insiste absolutamente en el uso de Hibernate, hay muchas otras opciones.

+0

¿Qué pasa con sqlite, que se acerca bastante a los datos persistentes en el sistema de archivos, aunque se hace como una base de datos SQL. –

+0

@bjarkef: sí, pero está escrito en C, por lo que si quisiera usarlo en una aplicación Java, habría perdido la independencia de la plataforma (o tendría que incluir varias copias). –

+0

@Michael Borgwardt: en realidad existen controladores JDBC para SQLite, e incluso hay un dialecto de Hibernate para él. Sin embargo, no se recomienda: la implementación es extremadamente lenta en comparación con otras bases de datos integradas. – parasietje

-5

Por supuesto que esto es posible, sólo tiene que utilizar Archivo io características de Java, siguiendo los pasos son necesarios: -

  1. crear un objeto File 2.Crear un objeto de FileInputStream (aunque hay formas que utilizan otras clases)
  2. Envuelva este objeto en un objeto Buffer o simplemente dentro de un java.util.Scanner.
  3. utilizan funciones de escritura específicas del objeto creado en el paso anterior.

Tenga en cuenta que su objeto debe implementar la interfaz Serializable. See following link,

+7

Creo que la idea detrás de la pregunta es hacerlo a través de Hibernate API. –

+0

Lo he intentado recientemente en mi proyecto, pero de alguna manera no pude encontrar una solución para esto, así que tuve que usar mis conceptos básicos de core java. Hibernate admite lectura desde un archivo plano, pero aún no se admite la escritura de objetos en un archivo o no pude encontrar ninguno ... – aProgrammer

+0

Estimados downvoters ... ¡se atreven a comentar! – aProgrammer

2

Parece que podría ser técnicamente posible si utiliza un controlador de texto sin formato JDBC; sin embargo, no he visto ninguno de código abierto que brinde acceso de escritura; el que encontré en sourceforge es de solo lectura.

+0

También está Ashpool, que utiliza archivos XML: http://wiki.robrohan.com/Ashpool.html – greyfairer

0

No sé exactaly su necesidad, pero tal vez es uno de abajo:

1 - Si su necesidad es sólo huir de SQL, se puede utilizar una base de datos NoSQL.
Hibernate lo soporta a través de Hibernate OGM (http://www.hibernate.org/subprojects/ogm). Hay algunas bases de datos como Cassandra, MongoDB, CouchDB, Hadoop ... Tiene algunas sugerencias Here .

2 - Ahora, si no desea utilizar un servidor de base de datos (con un proceso de servicio ejecutándose siempre), puede utilizar Apache Derby. Es un DB al igual que cualquier otro SQL, pero no es necesario un servidor. Utiliza un archivo singular para guardar datos. Puede transportar fácilmente toda la base de datos con su programa.
Echa un vistazo: http://db.apache.org/derby/

3 - Si realmente quieres un archivo plano de texto, puedes hacerlo como dijo Michael Borgwardt. Pero no sé si Hibernate sería una buena idea en este caso.

0

Ambos H2 y HyperSQL admiten el modo integrado (se ejecuta dentro de su JVM en lugar de hacerlo en un servidor independiente) y guardan en archivos locales; estas todavía son bases de datos SQL, pero con Hibernate no hay muchas otras opciones.

2

Ya tiene un modelo de entidad, supongo que no desea perder esto ni las relaciones que contiene. Se dirige un modelo de entidad para que se traduzca a una base de datos relacional.

Hibernate y cualquier otro proveedor de JPA (EclipseLink) traducen este modelo de entidad a SQL. Usan un controlador JDBC para proporcionar una conexión a una base de datos SQL. Esto, debes quedarte también.

La pregunta correcta es: ¿alguien sabe embedded Java SQL database, que se puede iniciar desde Java? Hay un montón de ellos, se menciona en este tema:

  • HyperSQL: almacena el resultado en un archivo de texto sin cifrar SQL, fácilmente importados en cualquier otra base de datos
  • H2: utiliza archivos binarios, bajo JAR tamaño del archivo
  • Derby: utiliza archivos binarios
  • Ashpool: almacena los datos en un archivo XML estructurado

he utilizado HyperSQL en un proyecto de datos pequeños y Apache Derby para un proyecto con grandes bases de datos (2 GB y más) Apache Derby funciona mejor en estas enormes bases de datos.

0

Bueno, como la pregunta todavía está abierta y el OP dijo que está abierto a nuevos enfoques/sugerencias, aquí está el mío (un poco tarde, pero está bien).

¿Conoces Prevayler? Es una implementación Java Prevalence que mantiene todos tus objetos comerciales en RAM y mantiene instantáneas/registros de cambios en el sistema de archivos, de esta manera es extremadamente rápido y confiable, ya que si hay algún bloqueo, restaurará su último estado y volverá a aplicar cada cambio a eso.

Además, es muy fácil de instalar y ejecutar en su aplicación.

+0

Suena realmente interesante gracias: D – Corvusoft

Cuestiones relacionadas