Bug #45272
Related Value Objects get deleted by default cascading
| Status: | New | Start date: | 2013-02-08 | |
|---|---|---|---|---|
| Priority: | Should have | Due date: | ||
| Assigned To: | - | % Done: | 0% | |
| Category: | - | |||
| Target version: | - | |||
| PHP Version: | Complexity: | |||
| Has patch: | No | Affected Flow version: | (any) | 
Description
Description by example:
An entity that relates to a value object:
/**
 * A Building
 *
 * @FLOW3\Entity
 */
class Building {
  /**
   * @ORM\ManyToOne
   * @var \MyNamespace\Domain\Model\BuildingType
   */
  protected $buildingType;
}
	Two entities point to the same BuildingType:
$building1 = new \MyNamespace\Domain\Model\Building();
$building1->setBuildingType(new \MyNamespace\Domain\Model\BuildingType('Type 1'));
$this->buildingRepository->add($building1);
$building2 = new \MyNamespace\Domain\Model\Building();
$building2->setBuildingType(new \MyNamespace\Domain\Model\BuildingType('Type 1'));
$this->buildingRepository->add($building2);
	When you try to delete building1, FLOW/doctrine will cascade the removal to the value object and that will cause an exception, because building2 still needs the value object, as it points to it's identifier.
I solved that by adding an empty cascade-attribute to that relations: @ORM\ManyToOne(cascade={""}).
Suggestion:
The cascading was added by Flow3AnnotationDriver as this driver adds $mapping['cascade'] = array('all') to all properties that are not aggregate roots. I suggest that in the case of value objects $mapping['cascade'] = array('persist') will be added istead of 'all'.