我想使用 Hibernate 将持久对象保存到文件系统,而不需要 SQL 数据库。
这可能吗?
Hibernate 在 JDBC 之上工作,因此您只需要一个 JDBC 驱动程序和一个匹配的 Hibernate 方言。
但是,JDBC 基本上是 SQL 的一种抽象,所以无论您使用什么,都会像 SQL 数据库一样看起来、走路和嘎嘎作响——您不妨使用一个,让自己省去很多麻烦。此外,任何此类解决方案在大小和复杂性上都将与Derby等轻量级 Java DB 相媲美。
当然,如果您不绝对坚持使用 Hibernate,还有许多其他选择。
您已经有一个实体模型,我想您不想丢失它,也不想丢失其中包含的关系。一个实体模型被直接翻译成一个关系数据库。
Hibernate 和任何其他 JPA 提供程序 (EclipseLink) 将此实体模型转换为 SQL。他们使用 JDBC 驱动程序来提供与 SQL 数据库的连接。这一点,你也需要保留。
要问的正确问题是:有没有人知道embedded Java SQL database
可以从 Java 中开始的 , ?本主题中提到了很多:
我在一个小数据项目中使用了 HyperSQL,在一个拥有庞大数据库(2Gb 及更多)的项目中使用了 Apache Derby。Apache Derby 在这些庞大的数据库上表现更好。
如果您使用 JDBC 纯文本驱动程序,这似乎在技术上是可行的;但是我还没有看到任何提供写访问的开源软件;我在 sourceforge 上找到的那个是只读的。
我不确切地知道您的需求,但也许它是以下之一:
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 是否是一个好主意。
好吧,由于问题仍然存在,并且 OP 说他对新方法/建议持开放态度,所以这是我的(有点晚但还可以)。
你知道普雷瓦勒吗?这是一个 Java Prevalence 实现,它将所有业务对象保存在 RAM 中并在文件系统中保留快照/更改日志,这样它非常快速和可靠,因为如果有任何崩溃,它会恢复它的最后状态并重新应用每个更改它。
此外,在您的应用程序中设置和运行非常容易。
当然这是可能的,您可以简单地使用 Java 的文件 io 功能,需要以下步骤:-
java.util.Scanner
.请注意,您的对象必须实现Serializable
接口。请参阅以下链接,