Sto usando Doctrine 2 come mio ORM, e le cose stanno andando bene, ma mi sono chiesto il metodo EntityManager#persist()
. La documentazione "Persisting entities" dice quanto segue riguardo una chiamata a persist()
per oggetto X
:sapere quando chiamare persiste
Se X è un'entità preesistente gestito, viene ignorato dall'operazione di persistere.
Questo mi porta a credere che persist()
debba essere chiamato solo quando l'oggetto è nuovo e non è stato ancora salvato nel database. Tuttavia, la documentazione per il "Deferred Explicit" change tracking policy dice:
... Doctrine 2 considera solo gli enti che sono stati esplicitamente contrassegnati per il rilevamento cambiamento attraverso una chiamata a EntityManager # persistere (entità) ...
... che suona come persist()
deve essere richiamato sull'oggetto per essere aggiornato. Quando si deve chiamare persist()
? Se solo su nuovi oggetti, c'è un impatto significativo sulle prestazioni per chiamarlo comunque ogni volta che un'entità viene aggiornata e lasciare che Doctrine risolva la differenza?
Si noti che quando si utilizza il rilevamento delle modifiche implicite differite (impostazione predefinita), Doctrine confronterà il valore originale con il nuovo valore per ogni proprietà (finora uguale a Differito differito) per ogni entità presente in UnitOfWork e non solo quelli che hai chiamato 'persist()' on. –
Ho vissuto metà della mia vita fino a quando il problema non ha destato il pensiero che la politica di default è la politica Deferred Explicit. –