2017-01-13 3 views
0

У меня есть 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

Есть две ошибки теперь, касаются использования каскадное слияние в сочетании с двунаправленными ассоциациями. , но связанная с ним ссылка на билет не работает.

Могла ли это быть моей проблемой? Если это так, как я могу решить эту проблему?

+0

Я предполагаю, что эти два объекта не являются фактически одним и тем же объектом, добавленным дважды? (Так как все их свойства одинаковы) – Erik

+0

Прошу прощения, я ошибочно скопировал дважды тот же запрос; второе поле отличается. Я редактировал вопрос. – Vkfan

+0

* @ORM \ JoinColumn (name = "id_commessa", name = "id") неверно. есть 2-кратное поле имени –

ответ

0

@ORM \ JoinColumn (name = "id_commessa", name = "id") неверно. есть 2-кратное поле имени

Смежные вопросы