是否可以将持久对象保存到文件系统

时间:2012-01-04 11:51:40

标签: java hibernate persistent-storage

我想使用Hibernate将持久对象保存到文件系统,而不需要SQL数据库。

这可能吗?

7 个答案:

答案 0 :(得分:4)

Hibernate在JDBC之上工作,所以你只需要一个JDBC驱动程序和一个匹配的Hibernate方言。

然而,JDBC基本上是SQL的抽象,因此无论你使用什么,它都会像SQL数据库那样外观,行走和嘎嘎 - 你也可以使用它并且让自己免于很多麻烦。此外,任何此类解决方案的大小和复杂性都可能与Derby等轻量级Java数据库相当。

当然,如果您不坚持使用Hibernate,还有很多其他选择。

答案 1 :(得分:2)

如果您使用JDBC纯文本驱动程序,它似乎在技术上可行;但是我还没有看到任何提供写访问权限的开源软件;我在sourceforge上找到的那个是只读的。

答案 2 :(得分:2)

你已经有了一个实体模型,我想你不想丢失它,也不想丢失它中包含的关系。实体模型被定向转换为关系数据库。

Hibernate和任何其他JPA提供程序(EclipseLink)将此实体模型转换为SQL。他们使用JDBC驱动程序提供与SQL数据库的连接。这个,你需要保持。

要问的正确问题是:有人知道embedded Java SQL database,你可以从Java开始吗?本主题中提到了很多这些:

  • HyperSQL:将结果存储在SQL明文文件中,随时导入到任何其他数据库中
  • H2:使用二进制文件,低JAR文件大小
  • Derby:使用二进制文件
  • Ashpool:将数据存储在XML结构文件中

我在一个项目中使用HyperSQL来处理小数据,而Apache Derby用于一个拥有大型数据库(2Gb及更多)的项目。 Apache Derby在这些庞大的数据库上表现更好。

答案 3 :(得分:0)

我不确切地知道你的需要,但也许它是下面的一个:

1 - 如果您的需求只是远离SQL,您可以使用NoSQL数据库 Hibernate通过Hibernate OGM(http://www.hibernate.org/subprojects/ogm)支持它。 有一些数据库,如Cassandra,MongoDB,CouchDB,Hadoop ......你有一些建议Here

2 - 现在,如果您不想使用数据库服务器(始终运行服务进程),则可以使用Apache Derby。它就像任何其他SQL一样,但不需要服务器。它使用单个文件来保存数据。您可以使用您的程序轻松传输所有数据库 看看:http://db.apache.org/derby/

3 - 如果你真的想要一些文本普通文件,你可以像Michael Borgwardt那样说。但我不知道在这种情况下Hibernate是不是一个好主意。

答案 4 :(得分:0)

H2HyperSQL都支持嵌入模式(在JVM中运行而不是在单独的服务器中运行)并保存到本地文件;这些仍然是SQL数据库,但是使用Hibernate时,其他选项并不多。

答案 5 :(得分:0)

好吧,因为问题仍然存在,OP表示他已接受新的方法/建议,这里是我的(有点晚了但还可以。)

你知道Prevayler吗?它是一种Java Prevalence实现,它将所有业务对象保存在RAM中并保存文件系统中的Snapshots / Changelogs,这样它非常快速和可靠,因为如果发生任何崩溃,它和#39; ll恢复它的最后状态并重新应用每个更改。

此外,在您的应用中设置和运行非常简单。

答案 6 :(得分:-5)

当然这是可能的,你可以简单地使用Java的文件io功能,需要以下步骤: -

  1. 创建文件对象 2.创建FileInputStream的对象(尽管有使用其他类的方法)
  2. 将此对象包装在Buffer对象中,或简单地包含在java.util.Scanner
  3. 使用上一步中创建的对象的特定写入功能。
  4. 请注意,您的对象必须实现Serializable接口。 See following link