12

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

这可能吗?

4

7 回答 7

4

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

但是,JDBC 基本上是 SQL 的一种抽象,所以无论您使用什么,都会像 SQL 数据库一样看起来、走路和嘎嘎作响——您不妨使用一个,让自己省去很多麻烦。此外,任何此类解决方案在大小和复杂性上都将与Derby等轻量级 Java DB 相媲美。

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

于 2012-01-04T12:08:40.843 回答
2

您已经有一个实体模型,我想您不想丢失它,也不想丢失其中包含的关系。一个实体模型被直接翻译成一个关系数据库。

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

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

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

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

于 2012-01-04T14:56:18.047 回答
2

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

于 2012-01-04T12:07:47.957 回答
1

我不确切地知道您的需求,但也许它是以下之一:

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

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

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

于 2012-01-04T12:31:49.500 回答
0

好吧,由于问题仍然存在,并且 OP 说他对新方法/建议持开放态度,所以这是我的(有点晚但还可以)。

你知道普雷瓦勒吗?这是一个 Java Prevalence 实现,它将所有业务对象保存在 RAM 中并在文件系统中保留快照/更改日志,这样它非常快速和可靠,因为如果有任何崩溃,它会恢复它的最后状态并重新应用每个更改它。

此外,在您的应用程序中设置和运行非常容易。

于 2012-01-18T21:18:32.293 回答
0

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

于 2012-01-04T13:16:29.193 回答
-5

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

  1. 创建一个文件对象 2.创建一个 FileInputStream 对象(虽然有使用其他类的方法)
  2. 将此对象包装在 Buffer 对象中或简单地包装在java.util.Scanner.
  3. 使用上一步创建的对象的特定写入函数。

请注意,您的对象必须实现Serializable接口。请参阅以下链接

于 2012-01-04T12:00:01.247 回答