[解決済み] EntityManagerは終了しました。
2023-01-18 01:46:02
質問
[Doctrine\ORM\ORMException]
The EntityManager is closed.
データ挿入時にDBAL例外が発生した後、EntityManagerが終了してしまい、再接続ができません。
このようにやってみましたが、接続ができません。
$this->em->close();
$this->set('doctrine.orm.entity_manager', null);
$this->set('doctrine.orm.default_entity_manager', null);
$this->get('doctrine')->resetEntityManager();
$this->em = $this->get('doctrine')->getEntityManager();
どなたか再接続する方法をご存知ですか?
どのように解決するのですか?
少なくとも Symfony 2.0 と Doctrine 2.1 では、EntityManager を閉じた後に再び開くことができないので、これは非常にやっかいな問題です。
この問題を克服するために私が見つけた唯一の方法は、独自の DBAL 接続クラスを作り、Doctrine のものをラップし、例外処理 (たとえば EntityManager に例外を出す前に何度も再試行する) を提供することです。これは少し厄介で、トランザクション環境ではいくつかの矛盾を引き起こす可能性があります(つまり、失敗したクエリがトランザクションの途中にある場合に何が起こるかよくわかりません)。
この方法で行くための構成例を以下に示します。
doctrine:
dbal:
default_connection: default
connections:
default:
driver: %database_driver%
host: %database_host%
user: %database_user%
password: %database_password%
charset: %database_charset%
wrapper_class: Your\DBAL\ReopeningConnectionWrapper
クラスは多かれ少なかれこのように始まるはずです。
namespace Your\DBAL;
class ReopeningConnectionWrapper extends Doctrine\DBAL\Connection {
// ...
}
非常に厄介なのは、例外処理ラッパーを提供するConnectionの各メソッドをオーバーライドしなければならないことです。クロージャを使うことで、そこらへんの苦痛を軽減することができます。
関連
-
[解決済み] ORM(Object-Relational Mapping)における「N+1 selects問題」とは?
-
[解決済み] JPA EntityManager。なぜmerge()ではなくpersist()を使うのか?
-
[解決済み】Doctrine QueryBuilder で行数を数える。
-
[解決済み】Symfony 2.xでは、本当にすべてをバンドルにすべきなのか?
-
[解決済み] Symfony2 の config.yml から設定を読み込むには?
-
[解決済み] symfony2のコントローラでparameters.ymlから読み込むにはどうしたらいいですか?
-
[解決済み] findAll Doctrine のメソッドを並べ替えるには?
-
[解決済み] composer.jsonのチルダ(~)は何を意味しているのですか?
-
[解決済み] Symfony2でTwigテンプレート内の環境名を取得する
-
[解決済み] テンプレート内のログインユーザーにアクセスする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】拡張子.yamlと.ymlの違いは何ですか?[重複あり]
-
[解決済み】Symfony 2.xでは、本当にすべてをバンドルにすべきなのか?
-
[解決済み] Symfony2 の config.yml から設定を読み込むには?
-
[解決済み] Symfony2のTwigテンプレートで設定パラメータを取得する方法
-
[解決済み] symfony2のコントローラでparameters.ymlから読み込むにはどうしたらいいですか?
-
[解決済み] composer.jsonのチルダ(~)は何を意味しているのですか?
-
[解決済み] symfony2 : リクエストをフォームにバインドした後にフォームのバリデーションエラーを取得する方法
-
[解決済み] Twigのパスに複数のパラメータを追加する
-
[解決済み] Doctrine 2 は manyToOne リレーションで nullable=false を使うことはできないのですか?
-
[解決済み] テンプレート内のログインユーザーにアクセスする