1

我想要或需要(不使用其他数据库)在内存中设置具有关系的实体(数据库表),例如一对多或多对多等。

我在这个论坛上看到了一些相关的东西: Map SQL (not JPQL) to a collection of simple Java objects?

我需要查询这些具有关系的实体并从中获取结果集,以便将结果数据推送到 Access 数据库中,我使用的是 Jackcess,它不是 JDBC 驱动程序。到目前为止,我已经看过MetaModeljOOQ。外面还有别的吗。我对 ORM 有一点了解,他们是查询内存中的集合还是只是将 sql 查询传递给数据库。

非常感谢任何帮助或建议。

4

2 回答 2

2

显然,您正在Java 生态系统中寻找类似 .NET 的LINQ-to-Objects的东西。没有什么比 LINQ-to-Objects 更复杂了,但是在 Java 中也有几种“查询”集合的方法。您可能对这些库中的任何一个感兴趣:

上述所有项目都是开源的,可能不再那么积极地维护,因为 Java 8 将引入更好的集合 API以及语言支持的 lambda 表达式,这使得这些非 SQL 专注的 LINQesque Java API过时了。

请注意,您专门询问MetaModeljOOQ。这些为您提供了用于查询数据库的查询 API。我认为这对您的用例没有多大帮助。

于 2013-08-03T09:47:19.367 回答
1

Hibernate 将查询对象缓存,但前提是您使用 Criteria 或 HQL 进行查询。如果您直接查询 SQL,它将直接针对数据库运行。

您的问题描述听起来比 Jackcess 本身可以处理的要多,但是如果在程序启动时您将完整的 Access DB 读入内存数据库(具有 JDBC 驱动程序的数据库),对该内存数据库运行 Hibernate 查询,然后在程序退出时将所有 Hibernate 更改刷新到内存数据库,然后将内存数据库的内容写入 Access 数据库?您获得了 Hibernate 的所有复杂查询功能,您所要做的就是编写 Jackcess-to-JDBC 代码以将 Access DB 加载到内存数据库中的等效模式中,然后使用逆向代码将其复制回来,这比为 Jackcess 编写完整的 JDBC 驱动程序要容易得多。

于 2013-08-01T17:41:06.730 回答