У меня есть 2 доктрины сущности:
CommessaDoctrine2 неправильно каскадные oneToMany отношения
/**
* @ORM\Id
* @ORM\Column(type = "bigint")
* @ORM\GeneratedValue(strategy = "AUTO")
*/
private $id;
/* ... */
/*
* @ORM\OneToMany(targetEntity = "AppBundle\Entity\Pipeline\pipeline", mappedBy = "commessa", cascade = {"persist", "remove"})
*/
private $pipelines;
и Pipeline
/**
* @ORM\Id
* @ORM\Column(type = "bigint")
* @ORM\GeneratedValue(strategy = "AUTO")
*/
private $id;
/* ... */
/**
* @ORM\ManyToOne(targetEntity = "AppBundle\Entity\Commessa\commessa", inversedBy = "pipelines")
* @ORM\JoinColumn(name = "id_commessa", name = "id")
*/
private $commessa;
Как вы можете видеть, оба объекта имеют автоинкрементируемого, одно поле первичного ключа называемый id, и двунаправленную связь с другой; конвейер автоматически сохраняется, когда я делаю это с помощью commessa.
Кроме того, оба объекта имеют только метод геттера для идентификатора, а не набор.
Теперь, когда я пытаюсь очистить экземпляр объекта класса Commessa в том числе более чем одного трубопровода, следующее сообщение об ошибке всплывает:
Исключение при выполнении «INSERT INTO трубопровода (Descrizione, nome_logico , id) VALUES (?,?,?) 'с параметрами ["", "frontend", "9"]:
SQLSTATE [23000]: Нарушение ограничения целостности: 1062 Дублирующая запись' 9 'для ключа' PRIMARY '
Ни в одном пункте моей трески e i устанавливает идентификатор конвейера и сбрасывает объект Commessa прямо перед флешем (и после сохранения) показывает, что он заполнен правильно, а конвейеры имеют «null» в качестве id, что, по моему мнению, является правильным.
Через профилировщика Symfony, сообщают следующие запросы:
"START_TRANSACTION"
INSERT INTO commessa (codice_commessa, data_creazione, data_scadenza, descrizione, id_anagrafica, id_cliente, id_stato, id_tipo_commesa) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
Parameters: [ 1 => lyme, 2 => 2017-01-13 10:47:53, 3 => 2017-01-17 00:00:00, 4 => Fai Lyme, 5 => 1, 6 => 1, 7 => 1, 8 => 1 ]
INSERT INTO pipeline (descrizione, nome_logico, id) VALUES (?, ?, ?)
Parameters: [1 => , 2 => frontend, 3 => 10]
INSERT INTO pipeline (descrizione, nome_logico, id) VALUES (?, ?, ?)
Parameters: [1 => , 2 => backend, 3 => 10]
"ROLLBACK"
Затем я наткнулся на the doctrine limitations and known issues page, указав в пункте 28.1.3
Есть две ошибки теперь, касаются использования каскадное слияние в сочетании с двунаправленными ассоциациями. , но связанная с ним ссылка на билет не работает.
Могла ли это быть моей проблемой? Если это так, как я могу решить эту проблему?
Я предполагаю, что эти два объекта не являются фактически одним и тем же объектом, добавленным дважды? (Так как все их свойства одинаковы) – Erik
Прошу прощения, я ошибочно скопировал дважды тот же запрос; второе поле отличается. Я редактировал вопрос. – Vkfan
* @ORM \ JoinColumn (name = "id_commessa", name = "id") неверно. есть 2-кратное поле имени –