1

Java エンティティ クラスが休止状態ツールによって db スキームから生成されるプロジェクトで作業しています。非主キー フィールドの 1 つでエンティティを検索できるように、生成されたクラスで名前付きクエリを使用したいと考えています。次のようなnamedQueriesが欲しいです:findUserByNameまたはfindUserByHeight。この目的には、entitymanger.find() および Criteria API に加えて、名前付きクエリが最適な選択です。

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

4

3 に答える 3

1

Spring を使用している場合は、Hadesを確認する必要があります。メソッド名から SQL ステートメントを作成する機能を提供します。あなたがする必要がある唯一のことは、インターフェイス (DAO) を書くことです - その実装は Hades によって「シミュレート」されます。

したがって、次のようなメソッド宣言を書くようなことができます:

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

メソッド名 -- SQL ステートメント マッピングが複雑なクエリで機能しない場合、Hades は、注釈で定義されたステートメントを使用する機能を提供します。

@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 - 私はそのプロジェクトが本当に好きです

于 2010-12-02T16:01:30.270 に答える
0

本当に必要なクエリだけを手動で生成したほうがよいのではないでしょうか? pojo とマッピングが自動生成され、名前付きクエリを使用したいという同じ設定があります。

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

あなたがやりたいことはわかります。生成されたコード/マッピングに名前付きクエリを自動的に組み込む REVENG を作成したい。REVENGを始めた時も同じでした。しかしその後、REVENG がこれに責任を負うべきではないことに気付きました。むしろ、db-schema から何かを生成する必要があります。それ以上でもそれ以下でもありません。名前付きクエリは、db スキーマの一部ではありません。したがって、ここで REVENG を誤用してはなりません。

ここを見てください:

于 2014-09-13T19:56:11.773 に答える
0

残念ながら、これは実際には Java のスタイルではありません。

Java のような静的な獣ではうまく機能しない概念 (誤解しないでください。私は自分の獣が大好きです) を思い出させてくださいRailsGrails

Spring Rooは、Rails と Grails が行うことを模倣し、好みのコントローラー メソッドを生成しますが、それは Spring Roo を使用する必要があることを意味します。

もう 1 つのアイデアは、ソース コード パーサーを使用して、生成されたコードを後処理することです。しかし、それはまた厳しい電話になるでしょう。

おそらく最善の策は、hbm2java ツールのコードを入手し、ルーチンにフックを追加することです。

于 2010-12-02T15:33:24.767 に答える