問題タブ [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.
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[com.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 を誤用しています。適切なクラスをどのように転送すればよいのでしょうか? それとも私の仮定が間違っていて、ここで何か他のことが間違っていますか?
java - Hibernate セッションを管理するための戦略
Hibernate を使用して Java Web アプリを開発しています。ここにいくつかのコードがあります:
hibernate.cfg.xml
BaseDAO.class
}
挿入、更新、削除、検索の汎用クラスを作成します
ご覧のとおり、各メソッドの後にセッションを閉じません。このコードは、insert、update、および find に対して正常に機能します。しかし、オブジェクトを削除したいとき:
この関数には2つのセッションを使用しているため、例外がスローされます。次に、各メソッドでセッションを閉じようとします:
オブジェクトを削除できるようになりましたが、トランザクションごとにセッションが閉じられているため、遅延ロードを使用できません。
では、これらの状況を克服するためにセッションを管理するにはどうすればよいですか!!!
java - DAO の設計と実装の実践
たとえば、私は多くのテーブルを持っていpeople
car
house
ます。一般的な DAO 設計の良い方法を知りたいです。
この場合、 とpeople
がcars
ありhouses
ます。独自のID、おそらくauto_increment int値car
を持っています。また、 の PK であるhouse
外部キーも持っています。userId
user
最初のステップとして、GenericDao
すべてのテーブルに基本的な CRUD 機能を提供するように設計します。
その後?
ユーザー A のすべての車を検索する必要があるため、withCarDao
関数findAllCarsForUser(int userid)
が必要です。については、同じものが必要です。人々が他の種類のものを持っている場合、それぞれに.findCarsByName(String name)
findCarsByNameForUser(String name, int userid)
House
HouseDao
ObjectXXXDao
しかし、上位層の場合、XXXDao
それらにさらされる必要がありますか?
私はそうすべきではないと思うので、すべてDAO
がラップされたService
クラスなどを持っCarService
HouseService
ています。ただし、これらのサービス クラスの関数については、おそらく statement のみreturn XXXDao.findCarsByNameForUser()
です。サービス クラスには追加機能がまったく追加されていないか、ほとんど追加されていません。
XXXservice
または、このレイヤーにどのような機能を追加する必要がありますか?
Car
andテーブルに参加するための要件がある場合はHouse
、おそらくCarHouseDao
andCarHouseService
が必要です。
知りたいのですが、これは一般的な DAO にとって適切な設計ですか? そうでない場合、良いアドバイスや例はありますか?
java - Hibernate を使用して DB からデータを取得する際のマッピング エラー
私は以下のエンティティクラスを持っています:
次の hibernate.cfg.xml もあります。
主に次のことを行っています。
dao クラスは次のとおりです。
私がそれを実行しているとき、私はエラーが発生しています:
findAll メソッドを次のように変更した場合:
その後、空のリストを取得しています。
誰かがこれを手伝ってくれる?
何らかの理由でセッションが破損している可能性があります。
ありがとう。
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 を試しました。
java - group by / unque による一般的な DAO 検索
検索機能に hibernate-generic-dao を使用しています。列フィールドに同じ値がある場合、レコードの 1 つだけを表示する必要があるためです。しかし、検索/フィルター機能でこれを実現する方法がわかりません。