問題タブ [entitymanager]
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 - JBoss JSF Bean の merge() で EntityManager が TransactionRequiredException をスローする
JBoss 5.0.1GA で JSF アプリケーションをセットアップして、テーブルにユーザーのリストを表示し、各ユーザーの横にあるボタンを使用して個々のユーザーを削除できるようにしました。
deleteUser が呼び出されると、JBoss から注入された EntityManager を取得する UserDAOBean に呼び出しが渡されます。
私はコードを使用しています
ユーザーを削除します (コードは JPA チュートリアルの c&p でした)。em.remove(entity) を呼び出すだけでは効果がなく、同じ例外が発生します。
この行に到達すると、TransactionRequiredException が発生します。
(明らかに無関係なスタックトレースのものをスキップします)
...
20:38:06,406 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet throwed exception javax.persistence.TransactionRequiredException: EntityManager must be access within a transaction at org.jboss.jpa.deployment.ManagedEntityManagerFactory.verifyInTx(ManagedEntityManagerFactory) .java:155) org.jboss.jpa.tx.TransactionScopedEntityManager.merge(TransactionScopedEntityManager.java:192) at.fhj.itm.utils.DAOImplTemplate.delete(DAOImplTemplate.java:54) at.fhj.itm. UserBean.delete(UserBean.java:53) at sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド)
...
すでに手動で管理されたトランザクション (em.getTransaction().begin() + .commit() ) をラップしようとしましたが、JBoss コンテナー内で許可されていないため失敗しました。UserTransaction でも成功しませんでした。この問題を Web で検索しても、同様のケースと解決策は見つかりませんでした。
誰かが以前に似たようなことを経験し、これに対する解決策を見つけましたか?
web-services - 非 EJB ベースの WebService に EntityManager を挿入する方法は?
見出しがすべてを物語っています: 私はシンプルな WebService を持っています
もちろん、WebService も web.xml で定義されており、WSDL の呼び出しは正常に機能し、クライアントは webmeethods などを呼び出すことができます。
ご覧のとおり、EntityManager と UserTransaction を注入する必要があるため、さらに DAO を作成する必要があります。ただし、どちらも常に null です。
WebService は EJB ベースではありません。これらのオブジェクトを取得する方法はありますか?
コンテナはJBoss 5.0GA
hibernate - JBossでHibernateを使用してEntityManagerのキャッシュを一貫した状態に維持するにはどうすればよいですか?
HibernateでJBossを実行していて、この問題が発生しています。
セッションBeanがEntityManagerを使用してエンティティを検索する場合、そのエンティティはEntityManagerのキャッシュにすでに存在している可能性があり、その状態はすでに古くなっている可能性があります。コードがそのようなエンティティを使用して決定を下す場合、バグを引き起こす可能性のある誤った決定を行う可能性があります。
これが例です。
HTTPリクエスト1.セッションBeanはエンティティインスタンスを作成し、フィールド「A」を値1に設定して保存します。永続化されたエンティティはID=4を取得します。
HTTPリクエスト2。セッションBeanはID=4のエンティティを検索し、そのフィールド「A」を値2に設定して保存します。
HTTPリクエスト3.セッションBeanは、ID = 4のエンティティを検索し、そのフィールド「A」をチェックします。値が1の場合は1つのことを行い、2の場合は別のことを行います。
リクエスト3のEMがリクエスト1と同じである場合、望ましくない動作が発生します。私はこれをテストし、約を得ました。失敗の10%のケース。
だから問題は-これを回避する方法は?エンティティが最新であることを確認する必要があるたびにem.refresh()またはem.clear()を呼び出すことは、リソースの浪費のようです。
hibernate - JBoss 4.2.3 にリクエストごとに休止状態のセッション キャッシュを強制的にクリアさせる方法は?
JBoss は複数のリクエストに対してエンティティ マネージャとその下にある休止状態のセッションを再利用しているように思えます。を使用して取得しただけであっても、場合によってはエンティティの状態が古くなっている可能性があることを証明するテストを実行しましたem.find()
。
この動作を無効にして、使用済みのセッションを強制的にクリアまたは破棄して、各リクエストがクリア キャッシュで処理されるようにするにはどうすればよいですか?
更新:
以下は事例です。
HTTP リクエスト 1. セッション Bean がエンティティ インスタンスを作成し、フィールド「A」を値 1 に設定して格納します。永続エンティティは ID = 4 を取得します。
HTTP リクエスト 2. セッション Bean は ID = 4 のエンティティを検索し、そのフィールド「A」を値 2 に設定して保存します。
HTTP リクエスト 3. セッション Bean は、ID = 4 のエンティティを検索し、そのフィールド「A」をチェックします。値が 1 の場合は 1 つのことを行い、2 の場合は別のことを行います。
リクエスト 3 の EM がリクエスト 1 と同じである場合、望ましくない動作が発生します。私はこれをテストし、約を得ました。10%の失敗例。
java - EntityManager 対の注入。EntityManagerFactory
長い質問ですが、ご容赦ください。
Web アプリケーションに Spring+JPA を使用しています。私のチームEntityManagerFactory
はGenericDAO
、. 「アプリケーション管理の永続性」を使用しています。JpaDaosupport
EntityManager
a を注入することに対する議論EntityManagerFactory
は、それは重すぎるので必要EntityManager
ないということです。EntityManager
また、Spring は Web リクエストごとに DAO の新しいインスタンスを作成するため (これは疑わしい)、同じインスタンスが 2 つのスレッドで共有されるため、同時実行の問題は発生しません。
EFM を注入することの議論は、ファクトリへのハンドルを持つことは常に良いことです。
どちらが最善のアプローチなのかわからないのですが、誰か教えてもらえますか?
hibernate - JPA EntityManager、どのように機能しますか?
初心者の質問で申し訳ありませんが、JPA + Hibernateに問題があるため、何かがはっきりしていないと思いました。A、B、C、Dなどのいくつかのエンティティがあり、AMethods、BMethods、CMethods、DMethodsをコーディングしました。各 *Methods クラスには、EntityManagerFactory による EntityManager の初期化と、基本的にクエリを実行するいくつかのメソッドが含まれています。シングルトン パターンを使用する必要があるかどうか (*Method クラスごとに EntityManager を使用するため)、またはクエリを実行するたびに EntityManager を開いたり閉じたりする必要があるかどうか、またはエンティティを永続化/削除する必要があるかどうかはわかりません...手伝って頂けますか??
oop - エンティティ オブジェクトはどこに作成すればよいですか?
エンティティ クラスとエンティティ DAO クラスがあります。
エンティティ クラスのインスタンスを作成するのは DAO クラスの責任である必要があります。または、エンティティ クラスを作成するためにデータベースからデータを取得するためだけに DAO クラスを使用するエンティティ クリエータ/マネージャ クラスが存在する必要があります。
ありがとう、
クリス
jpa - JPA EntityManager クエリで NoResultException がスローされるのに、find がスローされないのはなぜですか?
JPA 1.0 EntityManager で、find を介してオブジェクトを取得するときに、見つからない場合は null を処理する必要がありますが、createQuery を介して Query インターフェイスを使用すると、見つからない場合に getResultList が NoResultException をスローする本質的な理由を教えてください。
多分私は何かが欠けているかもしれませんが、言語には非常に一貫性がないと感じています。実際には、クエリインターフェイスを使用して単純なファインダーからよりきめ細かいクエリに変更したため、多くの再設計を行う必要がありました。
みんなありがとう。
java - EntityManager の更新
いくつかの db テーブルをリバース エンジニアリングし、ファサード インターフェイスと実装クラスを作成しました。エンティティに対して refresh() を実行する必要がありますが、EntityManager はリバース エンジニアリングに対して非公開であり、リバース エンジニアリングされたクラスを編集したくありません。refresh() を呼び出すことができるように、EntityManger を取得するにはどうすればよいですか?
jboss - Jboss サービス/マネージド Bean に関する質問
JBOSS 内でマネージド Bean/サービスを実行しています。次に、時折ウェイクアップしてマネージド Bean のメソッドを呼び出す Quartz ジョブがあります。このメソッドは長くて長引く場合があり、Quartz ジョブをタイムアウトさせたくないので、マネージド Bean 内にスレッドを実装して処理を実行しました。スレッドが終了したら、データベース テーブルを結果で更新する必要があります。これは非常に連続したプロセスであり、いくつかのビジネス ルールなどに基づく必要があります。
私の主な質問は、サービス内で問題なく EntityManager を使用できることですが、スレッド内からは使用できず、NullPointerException が発生します。これに対処する最良の方法は何ですか?
ありがとう、
スコット