2012-04-26 4 views
0

私は次のような問題があります。私たちはプログラムが動作するいくつかの異なるデータベースを持っているので、コンパイル時には正確なデータベース構造は不明です。ここでは、いくつかのSQL言語に翻訳されたクエリオブジェクトを作成し、明示的なクエリ文字列を与えるライブラリを探しています。SQLクエリを構築するための実行時定義テーブルを持つORMのようなJavaライブラリがありますか?

Hibernateなどの通常のORM-Librariesと同様のものを検索します。私たちはそれらのいくつかを調べましたが、テーブルとカラム以外のすべてがコンパイル時に通常のJavaクラスとして定義されているようです。私がこれに間違っているなら、私を修正してください。

ORMアプローチと私たちの基本的な違いは、データベースにJavaオブジェクトを格納するのではなく、Javaオブジェクトとしてクエリを生成することです。私の要点をより明確にするために、ライブラリで実行可能なコード例をいくつか示します。

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として処理できる必要があります。しかし、それはあまり期待できないでしょう;-)

+0

CriteriaAPI? – Darwly

答えて

1

Squiggle-SQLをチェックしましたか?

+0

いいですね。私はこれがまさに私が探していたものかもしれないと思う。しかし、まず、私は近くで見る必要があります。 – Aceonline

+0

最初の基礎として、Squiggleは完璧にフィットします。しかし、LIMIT、HAVING、GROUP BYのような、本当に必要な機能も欠けています。また、SELECTクエリも備えています。しかしオープンソースなので、私たちのニーズに合わせて拡張する予定です。 – Aceonline

0

単純なアプローチは、それ自身の設定(hibernateDialect)と '多くの'セッションです。多分、(休止状態の)セッション(プログラム設定)を再初期化しても、それを試みたことはありません。

1

jOOQまたはCrieriaAPiを意味しますか?

+0

私が知る限り、両方のlibsはコンパイル時にテーブル構造を定義する必要があります。これは、私が実行時にテーブル/カラムを定義する必要があるので、私が探していたものではありません。 – Aceonline

0

Apache Cayenneは、generic persistent classesをサポートするオープンソースのJava ORMです。実行時には、APIを使用してDBマッピングを動的に定義するか、DBスキーマをリバースエンジニアリングしてクエリを実行し、ジェネリックなマップライクなオブジェクトを取得します。事実、このアプローチではクエリだけでなく、他の通常のORM機能(怠惰な関係、オブジェクトの変更やコミットなど)を得ることができます。

関連する問題