問題タブ [spring-transactions]
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.
hibernate - spring jpa トランザクション クエリ数
プロジェクトにはSpring + JPA + Hibernate + MYSQLを使用しています。EHCache、クエリ キャッシュ、c3p0 も使用します。
コードのある時点で、リクエストごとに新しいトランザクションを開始します。
トランザクションを作成したメソッドを終了する直前に、現在のトランザクションでデータベースにヒットしたクエリの数を取得したいと考えています。
この情報を取得する方法を教えてください。
java - AbstractRoutingDataSource&Transactional Managers
私は現在、2つのデータソースを持つプログラムを持っています。各データソースは、1つのトランザクションマネージャーに関連付けられています。
データソースの両方にアクセスする関数があり、エラーが発生した場合、1つのデータソースがロールバックすると、2番目のデータソースもロールバックしますか?
ありがとう!
java - Spring Hibernate トランザクション例外のロールバック
2011 年 12 月 12 日更新
このアプリケーションは、ここにある Generic DAO クラスを使用しています。
@Repositoryの使用に関するスプリング マニュアルを読み直すと、Spring が例外変換を処理できるように、これを GenericDAO 実装に追加する必要があるように見えます。
@Repository を GenericDAO に追加しましたが、結果は変わりませんでした。親オブジェクトはまだデータベースに保持されています。
Spring 2.5.6、休止バージョンの JBoss 5.1、Spring MVC、MySQL を使用
例外が発生した場合にトランザクションが正しくロールバックされることを確認するために、いくつかのテストを行っています。以下のコードでは、2 番目のメソッド createProfile が NullPointerException をスローし、メソッドの完了を妨げます。トランザクションがロールバックされることを期待していました。私が見つけたのは、ユーザーオブジェクトがデータベースに永続化されていることです。私が望むのは、2 番目の操作が失敗した場合、最初の操作もロールバックする必要があるということです。
親メソッドの伝播を REQUIRED_NEW に変更するいくつかの変更を行いましたが、動作に変更は見られませんでした。
春のトランザクションのロギングをオンにしました。
私はここでの別の投稿を見て、春がトランザクションについて何を言わなければならないかを見直しています. トランザクション動作に沿って何かが欠けているようです。
ここで私は何を間違っていますか。
私は次のように定義しています
データ構成
spring - Spring @Transactional v SpringSecurity@Securedの一貫性のない動作
Springのドキュメントでは、@Transactionalアノテーションをインターフェースではなく具象クラス/メソッドに配置することを推奨しています。この理由は、StackOverflowで何度も取り上げられています。例:
@Transactionalアノテーションはどこに置くべきですか:インターフェース定義または実装クラスですか?
SpringSecurity@Securedの動作は異なります。ほとんどのドキュメントは、インターフェイスに注釈を配置することを示しています。実際、インターフェイスまたは具象クラスに注釈を付けるかどうか、およびJDKプロキシとCGLibプロキシのどちらを使用するかに関係なく機能するようです。
これは優れたソリューションのようです。では、なぜ矛盾があるのでしょうか。上記の質問に対する1つの答えは、パフォーマンスへの影響を示唆しています...しかし、確かにパフォーマンスはセキュリティにとって同じくらい重要ですか?!
そして、@ Securedソリューションはダイヤモンド継承の問題をどのように処理しますか(クラスは2つのインターフェースを実装し、両方とも@Securedの同じメソッドを異なる方法で実装します)?
hibernate - Spring の HibernateTransactionManager は非 Bean に適用できますか?
簡単な質問: Spring で Bean として宣言されていないクラスで Spring のトランザクション マネージャーを使用するにはどうすればよいですか (または可能ですか)。
詳細... Spring 3 と Hibernate 3.6 を使用するアプリケーションと、次のような 2 つのクラスがあります。
FooManagerImpl
Spring Bean (以下を参照) ですが、FooImpl
そうではありません。 FooImpl
エンティティでもある 3 番目のクラス との親子関係がBar
あります (ここで問題が発生します)。
そして、Spring 構成の関連部分:
私が理解しているように、を呼び出すとFooImpl.addBar(Bar)
、Hibernate は変更を永続化しようとしますが、トランザクションがバインドされていないため失敗します。FooImpl
Spring はBean ではないため、Spring はメソッドのいずれもプロキシしないため、TX バウンドはありません。それは正しい評価ですか?これを機能させる方法はありますか?
これまでに見つけた解決策ですが、うまく機能していないようです (または、機能させることができません)。
こちらのように、AOP プロキシをセットアップしてトランザクション アドバイスを挿入します。しかし、私が知る限り、これらのプロキシは、クラスを Bean として定義した場合にのみ適用されますよね?
などのAspectJも使用できると思います
<tx:annotation-driven mode="aspectj"/>
が、それには別のクラスローダーを使用する必要があるようです. . ここを参照してください。私は OpenSessionInView を使いたくありません。なぜなら、サービス レイヤーの外でバックエンド トランザクションが発生するという考えがあまり好きではないからです。
だから、私は困惑しています。誰にもアイデアはありますか?私が試したことのいずれかがすでに機能している必要がありますか? (たぶん私はそれを台無しにしました。)
前もって感謝します。
spring - 春のトランザクションをアトミックにする方法
データベース内のいくつかのエンティティをアトミックに永続化する必要がありますが、いくつかの問題があります... Emitente、NotaFiscal、Item、およびDuplicataの4つのエンティティがあります。エンティティアイテムと複製は、Emitenteに依存するNotaFiscalに依存します。したがって、私のdaoクラスは、Emitente、NotaFiscal、Duplicata、そして最後にItemを永続化しようとします。しかし、NotaFiscalを永続化しようとすると、Emitenteが存在しないというエラーが表示されます。これらの同じエンティティは、entityManager.getTransaction()。begin();を使用して正しく永続化されました。このプログラムがデスクトップだったときのアプローチ...
これは、すべてのDaoクラスを呼び出すクラスです。
これがスプリング構成です。
それを解決するために私は何ができますか?
spring - Spring +休止状態、ネストされたNOT_SUPPORTEDトランザクション属性
スプリング構成:
伝播NOT_SUPPORTEDを持つメソッドから呼び出されるネストされたREQUIRED_NEW伝播を持つことは可能ですか?
dumpAllData()で大規模なDB操作(〜100Mb)を実行するため、トランザクションを実行したくありません(そうでない場合は、パフォーマンスの問題になります)。ただし、updateItemメソッド(エンティティの単純な更新のみを行う)でトランザクション(ロールバック/コミット)を実行する必要があります。
spring - アノテーションを使用した Multi Transaction Manager Spring 構成
2 つの bean JpaTransactionManager があります。
修飾子表記で管理できます。
Java コード:
問題は、分離レベルまたは readOnly 割り当てをどのように使用するかです。@Qualifier アノテーションは機能しません。
どうすればこの問題を解決できますか?
jpa - サービス メソッドが返された後に開始される Spring 宣言型トランザクション
以下を使用してJavaEE Webアプリを実装することにより、Spring 3.0を独学しています。
- トムキャット7
- 春3.0、セキュリティ 3.1
- JPA : EclipseLink 2.3.1
- MySQL 5.5、コネクタ/J 5.1
私の問題は次のとおりです。
- Spring AOP を使用して、サービス層に宣言型トランザクション管理をセットアップしました。
- (同じ場所で宣言された Spring AOP ロギング インターセプターもあります。)
- 新しいエンティティの作成は問題ではありません。
- 既存のエンティティの更新は!
ログによると、トランザクションが開始される前にサービス メソッドが返されます。/strike>サービスレイヤーではなくDAOをトランザクション対応にすると、この更新不能は解消されます。
- しかし当局は、それはスタイルが悪いと言っています。
誰かがギルドの指針/ヒント/トリック/秘密を提供できますか?
編集:
DEBUG
ロガーで org.springframework の詳細をオンにしました。そして、私が知る限り、トランザクションは最終的に正しく処理されていることがわかります。つまり、問題のサービス メソッドの前に開始され、後に終了しています。
まだ更新に問題があります。私の更新は PU にも DB にも表示されません。それはなぜでしょう?...
編集:
更新を試みているときに、MySQL の一般ログも覗いてみました。JPA は、単にUPDATE
データベースに s を発行していないようです!
================================================== ================================
エンティティ:
の下
/li>myproject.data.entity
。特にない。ジェネリック JPA。
DAO:
の下のインターフェイスmyproject.data.dao
。
/li>interface AbstractDao
/li>interface MyEntityDao
の下での実装myproject.data.dao.jpa
。
/li>abstract class AbstractDaoJpa
/li>class MyEntityDaoJpa extends AbstractDaoJpa implements MyEntityDao
サービス層:
下のインターフェースmyproject.data.service
/li>interface EntityService
/li>interface MyEntityService extends EntityService
での実装myproject.data.service.impl
/li>class MyEntityServiceImpl implements MyEntityService
春の構成:
spring - Spring @Transactional および Spring Security @PreAuthorize の順序
だから私は次のようなものを持っています:
メソッドgetObj(id)
が呼び出されると、すべてが最初にトランザクションにラップされ、次に承認がチェックされます。この構成を維持し、最初に Spring に承認を確認させてから、ユーザーが承認されている場合はトランザクションを作成することは可能ですか?
答えを探すのにかなりの時間を費やしましたが、何も見つかりませんでした。