doctrine -- Ошибка Duplicate definition of column "..." on entity "..." in a field or discriminator column mapping.

Ошибка

Duplicate definition of column "value" on entity "App\Entity\Comission" in a field or discriminator column mapping.

Данная ошибка появлялась у меня при попытке сгенерировать миграции по аннотациям сущности:

<?php

namespace App\Entity;

use App\Entity\VO\Status\ComissionStatus;
use App\Entity\VO\ComissionType;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\Embedded;

/**
 * @ORM\Entity(repositoryClass="App\Repository\ComissionRepository")
 * @ORM\Table(name="comission")
 */
class Comission
{
    /**
     * @var int 
     * 
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     * @ORM\SequenceGenerator(sequenceName="comission_pkey")
     */
    private $id;
    
    /**
     * @ORM\Column(type="string", length=255)
     */
    private $outerId;
    
    /**
     * @ORM\Column(type="datetime")
     */
    private $date;
    
    /**
     * @ORM\Column(type="integer")
     */
    private $sum;
    
    /**
     * @var Sale
     * 
     * @ORM\OneToOne(targetEntity="Sale")
     * @ORM\JoinColumn(name="sale_id", referencedColumnName="id", onDelete="CASCADE")
     */
    private $sale;
    
    /** 
     * @var ComissionStatus
     * 
     * @Embedded(class = "App\Entity\VO\Status\ComissionStatus", columnPrefix = false)
     */
    private $status;

    /**
     * @var ComissionType
     * 
     * @Embedded(class = "App\Entity\VO\ComissionType", columnPrefix = false)
     */
    private $comissionType;
    
    public function __construct()
    {
        $this->status = new ComissionStatus();
        $this->comissionType = new ComissionType();
    }

Решение

Проблема возникала в результате некорректного использования аннотации @Embedded. Вернее, использована она была верно, но применялась дважды, и оба раза к объектам, чьё поле называлось value.

Соответственно, doctrine пыталась создать таблицу, в которой дважды появлялось поле value, поэтому выдавала ошибку дублирования.

Чтобы избавиться от этой проблемы, дадим новым полям префиксы:

/** 
     * @var ComissionStatus
     * 
     * @Embedded(class = "App\Entity\VO\Status\ComissionStatus", columnPrefix = "status_")
     */
    private $status;

    /**
     * @var ComissionType
     * 
     * @Embedded(class = "App\Entity\VO\ComissionType", columnPrefix = "type_")
     */
    private $comissionType;

Источники