DDC-108: Transitive persistence broken #1674

Closed
doctrinebot opened this Issue Nov 3, 2009 · 3 comments

1 participant

@doctrinebot

Jira issue originally created by user nicokaiser:

When cascading 'persist' operations, the object which was not persisted implicitly is being written to the DB with wrong parameters, broken SQL:

INSERT INTO email (email, userId) VALUES (?, ?)
array(3) {
[1]=>
NULL
[2]=>
string(16) "user@example.com"
[3]=>
int(1)
}

See the attached example for details... When I uncomment the "$em->persist($email);" line, everything works as expected (but I'd like this persist to be done automatically...)

@doctrinebot

Comment created by romanb:

Indeed this looks like a bug, but it is unrelated to cascades.

I will explain on your code sample:

$em = EntityManager::create($connectionOptions, $config);
$user = new \Entity\User;
$user->setName('Bob');

// This would invoke persist() on the associated email because of the cascade, but there is no email yet!
// After persist() $user is MANAGED
$em->persist($user);

$email = new \Entity\Email;
$email->setEmail('user@example.com');
$user->addEmails($email);

// On flush the email should be correctly persisted because it is NEW but referenced/reachable from a MANAGED entity ($user)
$em->flush();

Just to clarify. So this is a bug in the "persistence by reachability".

"persistence by reachability" means that a NEW entity (like $email) that is associated to a MANAGED entity (like $user) and the association has cascade=persist is automatically persisted on flush().

I still need to write about persistence by reachability in the manual but as you have already found out, it is intuitive since you expect that to happen.

@doctrinebot

Comment created by romanb:

Ok its not completely unrelated to cascades since persistence by reachability still requires cascade=persist ;) but the bug itself has to do with incorrect changeset calculation.

@doctrinebot

Issue was closed with resolution "Fixed"

@doctrinebot doctrinebot added this to the 2.0-ALPHA3 milestone Dec 6, 2015
@doctrinebot doctrinebot closed this Dec 6, 2015
@doctrinebot doctrinebot added the Bug label Dec 7, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment