0

我有以下问题:我们有几个不同的数据库运行我们的程序,所以在编译时确切的数据库结构是未知的。我们现在正在寻找一个允许我们构建查询对象的库,它可以被翻译成几种 SQL 方言并给我们一个普通的查询字符串。

我们搜索类似于常规 ORM 库的东西,例如 Hibernate。我们已经研究了其中的一些,但似乎除了表和列之外的所有这些都在编译时定义为常规的 java 类。如果我在这方面错了,请纠正我。

ORM 方法与我们的方法之间的基本区别在于,我们不想将 java-objects 存储在数据库中,而是将查询生成为 java-objects。为了更清楚地说明我的观点,我将向您展示一些示例代码,这些代码应该可由库执行。

QueryObject query = new QueryObject();
query.addSelectedTable("customers");
query.addSelectedColumn("customerID");
query.addSelectedColumn("firstname");
query.addCondition("age < 20");
query.addLimit(10);

System.out.println(query.toMySQL()); 
//prints SELECT customerID, firstname FROM customers WHERE age < 20 LIMIT 10;

我不知道这样的图书馆是否存在,但如果你知道,我很乐意知道。

如果要求更高,还有其他几个功能,那就太好了。例如,它还应该能够将子查询和其他查询类型作为 SELECT 来处理。但这太过分了;-)

4

4 回答 4

1

你是说jOOQ还是 CrieriaAPi?

于 2012-04-26T09:32:08.783 回答
1

你检查过Squiggle-SQL吗?

于 2012-04-26T09:31:03.713 回答
0

一种简单的方法是使用自己的配置(hibernateDialect)进行“许多”会话。也许重新初始化(休眠)会话(程序配置)有效 - 从未尝试过。

于 2012-04-26T09:27:53.187 回答
0

Apache Cayenne是一个支持通用持久类的开源 Java ORM 。在运行时,您将通过 API 或通过对 DB 模式进行逆向工程来动态定义您的 DB 映射,然后运行查询,取回类似映射的通用对象。事实上,通过这种方法,您不仅可以获得查询,还可以获得您可能期望的所有其他正常 ORM 功能 - 惰性关系、修改和提交对象的能力等。

于 2012-04-27T06:40:34.537 回答