2017-01-13 1 views
0

을 oneToMany 계단식 : 당신이 볼 수 있듯이, 두 개체가 자동 증가가
CommessaDoctrine2 잘못 내가이 교리 엔티티가 관계

/** 
* @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; 

및 파이프 라인

/** 
* @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를 사용할 때마다 자동으로 유지됩니다.
또한 두 엔티티에는 id에 대한 getter 메소드 만 있고 setter 엔트리는 없습니다. 이제

, 난 하나의 파이프 라인 이상을 포함하는 클래스 Commessa의 개체 인스턴스를 플러시하려고 할 때마다, 다음과 같은 오류가 팝업은 : 파이프 라인 (descrizione, nome_logico INTO INSERT '실행하는 동안

예외가 발생했습니다 , id) VALUES (","frontend ","9 ") :

SQLSTATE [23000] : 무결성 제약 조건 위반 : 1062 키 'PRIMARY에 대한 중복 항목'9 ' '

아무 래도 내 대구에 e 파이프 라인의 ID를 설정하고 플러시 (및 지속 후) 직전에 Commessa 개체를 덤프하면 올바르게 채워 졌음을 보여주고 파이프 라인에는 ID가 "null"인 것으로 추측됩니다. 올바른 것으로 추측됩니다. 심포니 프로파일 러를 통해

은, 다음과 같은 쿼리가보고됩니다

"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 번 이름 필드가 있습니다