I still don't understand whether you have any special requirements. Your code doesn't update a parent, but it copies Parent p to a newly constructed Parent parent. If a copy is what you need (i.e. if your post condition is to have two Parent objects), proceed as indicated by your code. Concerning getting and setting all those attributes, have a look at the Java deep and shallow copy mechanisms, which might relieve you from writing all those cumbersome lines.
When copying, it's up to your application how to set the children of the newly constructed parent. The requirements for this come from your problem domain. Should p's children objects become parent's children? Should they continue to be children of parent, which would make the parent - child relationship many-to-many? Should copies of the parent's children become p's children? That's an issue you have to handle in your Java code, after which Hibernate will persist the parent - children graph for you.
In any case, I would call this operation copyParent instead of updateParent.
If, however, your initial requirement is an update instead of a copy, your code should work on the initial parent alone without creating a new one. The sequence is something like
Code:
get(p); // or another operation getting p from the database, or lock(p) if p is detached
p.setSomeAttributes(newValues);
saveOrUpdate(p);