Kdyby\Doctrine – serializace a deserializace entit

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jashin
Člen | 34
+
0
-

Zdravím,

nevím zda se jedná o bug nebo dělám něco zle, ale nedaří se mi moc dobře serializovat a deserializovat entity ze SESSION.

Abych byl konkrétní. Mám entitu Supplier, která má ManyToOne associaci Currency.

/**
* @ORM\Entity
*/
class Supplier extends Entity {
	/**
	 * @ORM\Id
	 * @ORM\Column(type="integer")
	 * @ORM\GeneratedValue(strategy="AUTO")
	 * @var integer
	 */
	private $id;

	/**
	 * @ORM\Column(length=150)
 	 * @Assert\NotBlank(message="Název nesmí být prázdný")
	 * @var string
	 * */
	private $name;

	/**
	 * @ORM\ManyToOne(targetEntity="Currency", cascade={"merge", "detach"})
	 * @ORM\JoinColumn(name="id_currency", referencedColumnName="id_currency")
	 * @var Currency
	 */
	private $currency;
}

Z EM si vytáhnu entitu Supplier (dejme tomu klasicky pomocí find()) tzn. $currency je v entitě jako proxy a očekává se, že se dotáhne dle potřeby lazyloadingem.

Následně Supplier uložím do SESSION a při dalším requestu vytáhnu. Supplier ze session a pomocí

$e->merge($_SESSION['supplier']); //pouze názorný zápis

se snažím připojit zpět do EM. Celé me to spadne výjímkou „Název nesmí být prázdný“ který vyvolá subscriber assertu při prePersistu, tzn. EM považuje Currency na novou entitu při kaskadovém mergi nad Supplier.

Proč tomu tak je? Co dělám zle?

Díky za každou radu :)

Editoval jashin (19. 8. 2015 10:25)