をoneToManyカスケード:あなたが見ることができるように、両方のエンティティは、AUTO-INCREMENTを持って
CommessaDoctrine2が誤って私は2つの教義エンティティ持っ関係
/**
* @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の取得メソッドしか持っていませんが、setterはありません。
さて、私は単一のパイプラインよりも多く含むクラスCommessaのオブジェクトインスタンスをフラッシュしようとするたびに、次のエラーがポップアップ表示されます:パイプライン(する説明、nome_logicoに」INSERTを実行しながら
例外が発生しました( "、" frontend "、" 9 "):
SQLSTATE [23000]:整合性制約違反:1062キー 'PRIMARYの重複エントリ' 9 ' '
マイ・コー私はパイプラインのIDを設定し、フラッシュの前にCommessaオブジェクトをダンプする(そしてpersistの後に)、それが正しく設定されていることを示します。パイプラインはIDとして "null"を持っています。 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"
は、私は、今、その懸念を使用する2つのバグがありますがポイント28.1.3
で述べ、the doctrine limitations and known issues pageつまずいカスケードは双方向アソシエーションと組み合わせてマージします。 しかし、関連するチケットのリンクは無効です。
これは私の問題でしょうか? もしそうなら、どうすればこの問題を解決できますか?
私はこれらの2つのオブジェクトが実際には同じオブジェクトではないと仮定していますが、2度追加されていますか? (それらのプロパティはすべて同じなので) – Erik
私は申し訳ありませんが、私は誤って同じクエリを2回コピーしました。第2のフィールドは異なる。私はその質問を編集した。 – Vkfan
* @ORM \ JoinColumn(name = "id_commessa"、name = "id")が間違っています。 2倍の名前フィールドがあります –