2012-03-16 8 views
1

Doctrineのバージョン2.1教義2.1 - エンティティiは多数のオブジェクトを永続化しています

を持続することができない、私は$this->entityManager->flush()$this->entityManager->clear()をしなければならない理由がある、しかし、それはよく知られてエラーが発生します。

Exception: "A new entity was found through the relationship 'Entities\A#B' that was not configured to cascade persist operations for entity: Entities\[email protected] Explicitly persist the new entity or configure cascading persist operations on the relationship. If you cannot find out which entity causes the problem implement 'Entities\B#__toString()' to get a clue."

最初のフラッシュには機能しますが、それ以外のフラッシュメモリでは機能しません。私はここで$this->entityManager->clear();

は、コードサンプルでコメントする場合:

if ($flushCounter % 50 == 0) { 
    $this->entityManager->flush(); 
    $this->entityManager->clear(); 
    //$this->entityManager->detach($B); <- with these two lines commented I tried to fix the error, but it did not work 
    //$B = $this->entityManager->find(ENTITY_NAMESPACE . "\B", (int) $B_id); 
    } 
    $flushCounter++; 

私は明確に()関数をコメントアウトしても問題が修正されますが、管理するためのより良い方法がない限り、私はそれを行うにはしたくないことを繰り返すことになりますメモリ

+0

アソシエーション内のエンティティは変更されているようですが、アソシエーションの逆の側にあります。したがって、所有サイドを永続化しようとすると、 'CASCADE:persist'セットがないので、エラーをスローします。 –

答えて

0

欠落していたものは、再度フェッチした後でも$ Bに保持されます。

私のために役立っ何
if ($flushCounter % 50 == 0) { 
    $this->entityManager->flush(); 
    $this->entityManager->clear(); 
    $B = $this->entityManager->find(ENTITY_NAMESPACE . "\B", (int) $B_id); 
    $this->entityManager->persist($B); 
    } 
    $flushCounter++; 
1

膨大な量(> 500.000)に挿入なっていただけのエンティティをクリアした、メモリにそのエンティティの関連するオブジェクトの残りの部分を残して

if ($repcount++ % 1000 == 0) { 
    $em->flush(); 
    $em->clear('Entity\Class\Using\Memory'); 
} 

このかかわらず、 afaikはdoctrine(> 2.2.0)とsymfony2(> 2.1)のバージョンが決して動作しません。

関連する問題