問題タブ [hibernate-generic-dao]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
570 参照

java - tapestry 5 でデータベース アクセスに汎用エディタを使用するには?

以下を含むタペストリー5プロジェクトがあります。

  • 他のすべての具象エンティティによって継承されるエンティティ パッケージ内の抽象エンティティ

    /li>
  • AbstractEntity を継承するいくつかの具体的なエンティティ (質問にはまったく関係がないと思うので、それらの本体のほとんどを省略します。それらは単純なエンティティ データ クラスです)。そのようなエンティティ クラスの例:

    /li>
  • 汎用 DAO インターフェイス

    /li>
  • サービス パッケージの AppModule で、binder.bind を使用してバインドされている汎用 DAO インターフェイスの実装

    /li>
  • コンポーネント パッケージ内の汎用エディタ Java クラス

    /li>
  • GenericEditor Java クラスに関連付けられた .tml ファイル

    /li>
  • さらに、pages パッケージにはいくつかの Java クラスとそれに関連する .tml ファイルがあり、これらはもともと genericDAO を使用せずに作成されましたが、具体的な DAO を使用して作成されたため、次のようになりました (そのうちの 1 つの例)。

    /li>
  • 関連する .tml ファイル:

    /li>

具体的な DAO を使用する上記のコードは適切に機能し、データベースに新しい行を入力するためのフォームが期待どおりにページに表示され、データベース テーブルからの行を含むグリッドも表示されます。

したがって、基本的な考え方は、GenericEditor を genericDAO と一緒に使用して、必要なコードの量を削減し、任意のデータベース テーブルを操作することでした。BeanEditForm を使用してテーブルに新しい行を入力し、Grid を使用してテーブルからすべての行を表示し、それらを削除または編集します。理論的には、これは AbstractEntity クラスを継承するすべてのエンティティで機能するはずなので、エンティティごとに個別の DAO インターフェイスと実装の組み合わせを作成する必要はありません。

問題は、上記の GenericEditor を実際に使用する方法がわからないため、これを意図したとおりに機能させることができないことです。私は次のことを試みました:

  • 変更後の RoomPage.java:

    /li>
  • 変更後の RoomPage.tml:

    /li>

しかし、それがもたらしたのはヌルポインタ例外とこのエラーだけだったので、それは明らかにうまくいきません:

Blockquote [エラー] pages.RoomPage SetupRender の Render キュー エラー [RoomPage:ge.grid]: コンポーネント RoomPage:ge.grid のパラメーター 'source' の読み取りに失敗しました: org.apache.tapestry5.ioc.internal.util.TapestryException org.apache .tapestry5.ioc.internal.util.TapestryException: コンポーネント RoomPage:ge.grid のパラメータ 'source' の読み取りに失敗しました: org.apache.tapestry5.ioc.internal.util.TapestryException [クラスパス:com/mycompany/myproject/components/ で] GenericEditor.tml、5 行目]

次に、グリッド要素を完全に削除し、GenericEditor を BeanEditForm のみで実行しようとしました。これにより、ページが実際に読み込まれましたが、ページに予想されるフォームが表示される代わりに、Room エンティティのフィールドとフォームの最後に [作成/更新] ボタンが表示され、[作成/更新] ボタンだけが表示されました。 BeanEditForm が属性のないオブジェクトで作成されたかのように、フィールドはありません。[作成/更新] ボタンを押すと、別のヌル ポインター例外が作成されます。

デバッグの目的で、GenericEditor.java を非ジェネリックな方法で動作するように変更しました。その中にジェネリック型 T の別の属性を作成し、(T) としてキャストされた Room 型の新しいオブジェクトとして初期化します。次に、以下に示すように、属性クラスが部屋属性と同じタイプであることを宣言します。

これらの変更を加えて (グリッドを無効にし、beaneditform のみを有効にして) アプリケーションを実行すると、ページはすべての入力フィールドを正しくレンダリングするようになりました。これにより、GenericEditor がジェネリックを介して適切な型を受け取らないという事実に問題があるという結論に達しましたが、私のロジックが正しいかどうか、また正しい場合でも、この問題を回避する方法はわかりません。問題の別の考えられる原因は、PropertyConduit である可能性があります。正確にどのように機能するかはわかりません。また、正しく使用しているかどうかもわかりません。したがって、問題がそこから発生する可能性も排除していません。いずれにせよ、私の主な推測では、GenericEditor を何らかの形で誤用しているので、この質問のタイトルが示すように、データベースに適切にアクセスするために GenericEditor をどのように使用すればよいのでしょうか?

私は自分自身と同様の問題をstackoverflowで検索しましたが、ここでも他の場所でも同様の問題を見つけることができませんでした。ここにいる誰かが、問題が何であるかを特定し、それを回避するのを手伝ってくれることを願っています. 前もって感謝します。

更新: GenericEditor の myclass に転送されるクラスのタイプを確認することで、さらにデバッグを行いました。GenericEditor.java の次のビットを変更しました。

次へ:

これにより、次の出力が得られました。

コンジット1.toString(): PropertyConduit[c​​om.mycompany.myproject.components.GenericEditor bean]

コンジット1.getPropertyType().toString(): クラス com.mycompany.myproject.entities.AbstractEntity

コンジット1.getPropertyType().getName(): com.mycompany.myproject.entities.AbstractEntity

myclass.getName(): com.mycompany.myproject.entities.AbstractEntity

これは、GenericEditor に転送される型 T が意図した Room ではなく、AbstractEntity であることを意味していると私は考えています。私の仮定が正しければ、ジェネリックを介して適切なクラスを転送していないため、GenericEditor を誤用しています。適切なクラスをどのように転送すればよいのでしょうか? それとも私の仮定が間違っていて、ここで何か他のことが間違っていますか?

0 投票する
1 に答える
528 参照

java - Hibernate セッションを管理するための戦略

Hibernate を使用して Java Web アプリを開発しています。ここにいくつかのコードがあります:

hibernate.cfg.xml

BaseDAO.class

}

挿入、更新、削除、検索の汎用クラスを作成します

ご覧のとおり、各メソッドの後にセッションを閉じません。このコードは、insert、update、および find に対して正常に機能します。しかし、オブジェクトを削除したいとき:

この関数には2つのセッションを使用しているため、例外がスローされます。次に、各メソッドでセッションを閉じようとします:

オブジェクトを削除できるようになりましたが、トランザクションごとにセッションが閉じられているため、遅延ロードを使用できません。

では、これらの状況を克服するためにセッションを管理するにはどうすればよいですか!!!

0 投票する
0 に答える
117 参照

java - DAO の設計と実装の実践

たとえば、私は多くのテーブルを持っていpeople car houseます。一般的な DAO 設計の良い方法を知りたいです。

この場合、 とpeoplecarsありhousesます。独自のID、おそらくauto_increment int値carを持っています。また、 の PK であるhouse外部キーも持っています。userIduser

最初のステップとして、GenericDaoすべてのテーブルに基本的な CRUD 機能を提供するように設計します。

その後?

ユーザー A のすべての車を検索する必要があるため、withCarDao関数findAllCarsForUser(int userid)が必要です。については、同じものが必要です。人々が他の種類のものを持っている場合、それぞれに.findCarsByName(String name)findCarsByNameForUser(String name, int userid)HouseHouseDaoObjectXXXDao

しかし、上位層の場合、XXXDaoそれらにさらされる必要がありますか?

私はそうすべきではないと思うので、すべてDAOがラップされたServiceクラスなどを持っCarService HouseServiceています。ただし、これらのサービス クラスの関数については、おそらく statement のみreturn XXXDao.findCarsByNameForUser()です。サービス クラスには追加機能がまったく追加されていないか、ほとんど追加されていません。

XXXserviceまたは、このレイヤーにどのような機能を追加する必要がありますか?

Carandテーブルに参加するための要件が​​ある場合はHouse、おそらくCarHouseDaoandCarHouseServiceが必要です。

知りたいのですが、これは一般的な DAO にとって適切な設計ですか? そうでない場合、良いアドバイスや例はありますか?

0 投票する
1 に答える
241 参照

java - Hibernate を使用して DB からデータを取得する際のマッピング エラー

私は以下のエンティティクラスを持っています:

次の hibernate.cfg.xml もあります。

主に次のことを行っています。

dao クラスは次のとおりです。

私がそれを実行しているとき、私はエラーが発生しています:

findAll メソッドを次のように変更した場合:

その後、空のリストを取得しています。

誰かがこれを手伝ってくれる?

何らかの理由でセッションが破損している可能性があります。

ありがとう。

0 投票する
1 に答える
179 参照

java - GenericDAO で 2 番目のデータソースを挿入中にエラーが発生しました

GenericDAO で 2 番目のデータソースを挿入中にエラーが発生しました

persistence.xml に 2 番目のベースを挿入しようとしています。jboss でデータソースを設定してテストしました。xml に 2 番目の永続ユニットを挿入して jboss を起動しようとすると、以下のエラーが発生します。各DAOクラス@PersistenceContext (unitName = "unit-name") および@PersistenceUnitに設定しようとしましたが、役に立ちませんでした。いくつかのチュートリアルに従おうとしましたが、自分の状況に順を追って合わせる方法がわかりませんでした。また、これが当てはまるかどうかもわかりません。

私の場合の構成方法を知りたいのですが、最大の違いは、GenericDAO からの EntityManager があり、これが理解を困難にしていることだと思います。DAO またはエンティティで別のアノテーションを付ける必要がある場合、別の抽象クラスを作成する必要がある場合はどうすればよいですか?

エラー:

永続的な unitName が指定されておらず、展開アプリケーション "intranet.war" の展開に永続的なドライブ定義 2 があります。持続性ユニットの定義を 1 つだけ持つようにアプリケーションのデプロイメントを変更するか、持続性ユニットの参照ごとに unitName を指定することができます。

persistence.xml

GenericDAO クラス

基本イントラシスを使用するクラス itemDAO。その中で @PersistenceContext (unitName = "intrasis") を使用しようとしました

他のバンクと tbm を使用する別のクラス 他のバンクの PersistenceContext を試しました。

0 投票する
1 に答える
63 参照

java - group by / unque による一般的な DAO 検索

検索機能に hibernate-generic-dao を使用しています。列フィールドに同じ値がある場合、レコードの 1 つだけを表示する必要があるためです。しかし、検索/フィルター機能でこれを実現する方法がわかりません。