2010-12-02 39 views
1

私は、Javaエンティティクラスがhibernateツールによってdbスキームから生成されるプロジェクトで作業しています。非プライマリキーフィールドの1つによってエンティティを見つけることができるように、生成されたクラスで名前付きクエリを使用したいと思います。私はこのようなnamedQueriesを持っています:findUserByNameまたはfindUserByHeight。 entitymanger.find()とCriteria APIの他にも、名前付きクエリが最適な選択肢となります。hibernateでnamedQueryを生成するには?

私の質問は、hibernateツール/ hbm2java /リバースエンジニアリング戦略を設定して、dbテーブルの各列に対してnamedQueriesを生成する方法です。インターネット上で対応する情報が見つかりませんでした。私はこれが可能であることを望む。 NetBeansでEclipse JPA 2.0 Persistance Managerを使用して、名前付きクエリーを生成できました。

答えて

0

これは実際にJavaのスタイルではありません。私は恐れています。

あなたが望む方法は、RailsGrailsを思い出させます。Javaのような静的な獣ではうまく機能しない概念です(間違ってはいません、私は獣を愛しています)。

Spring Rooは、どのようなレールとグレイルが何をしているのかを模倣し、好きなようなコントローラメソッドを生成しますが、これはSpring Rooを使用する必要があることを意味します。

もう1つの考え方は、source code parserを使用して生成コードを後処理することです。しかし、それはまた厳しい要求になるでしょう。

恐らく、hbm2javaツールのコードを取得し、ルーチンのフックを追加することをお勧めします。

1

Springを使用している場合は、Hadesをご覧ください。メソッド名からSQLステートメントを作成する機能を提供します。 あなたが行う必要があるのは、インターフェイス(DAO)を書くことだけです。その実装はHadesによって "シミュレート"されています。 SQLなステートメントマッピングは複雑なクエリに対しては動作しません。そして、ハデスは、アノテーションで定義されたステートメントを使用するfunctionaltyをprovieds - メソッド名が場合

public interface CustomerDAO { 
    List<Customer> findByFirstName(String firstName); 
} 

だから、あなたは次のようにメソッド宣言を書くような何かを行うことができます。

@Query("FROM Deal as x WHERE customer = :customer AND (x.zombie = 'NONE' OR x.zombie ='NEW')") 
Deal findActiveDealByCustomer(@Param("customer") Customer customer); 

@see http://redmine.synyx.org/projects/show/hades - 手動であなたが本当に必要なものだけクエリを生成するために、私は本当に、そのプロジェクトのよう

0

はそれがより良いと思いませんか?私はpojosとマッピングが自動生成されているのと同じ設定をしていますし、名前付きクエリを使用したいという希望もあります。

すべての名前付きクエリを保持する新しい集中型マッピングファイルを作成する際に解決しました。 REVENGプロセスを自動生成する必要がある場合でも、このクエリマッピングファイルは置き換えられずに動作します。

私はあなたがしたいことを理解しています。生成されたコード/マッピングに名前付きクエリーを自動的に組み込むREVENGを作成したいとします。私はREVENGで始まるときに同じ点に来ました。しかし、その後、私は、REVENGがこれに責任を負うべきではないことを認識しました。むしろ、db-schemaのものを生成するはずです。それ以上ではない。 Named-Queriesはdb-schemaの一部ではありません。だからここで悪用するべきではありません。

見てくださいhere

関連する問題