I guess this happens because of the order the cascades are processed. I don't know if it is deterministic or if the order can be controlled in some way.
In any case, my theory is that, when saving the parent object one of the children has to be processed first. In your case it seems like this happens to be the child that also has a reference to the other child. And since this child hasn't been processed yet you get the exception. If you somehow can force Hibernate to process the other child first I think everything should work.
The thing is that I don't know if it is possible to control the order the cascades are processed.... but I just found this in Hibernate JIRA
http://opensource.atlassian.com/project ... e/HHH-3229
and maybe it has been fixed in the next release.