If you load an object from a session A, the object will be updated when flushing the session A (wether you saveOrUpdate it or not).
If you indirectly load an object
Code:
A a = (A)session.load(A.class, id);
C c = a.getB().getC()
it will be updated whan flushing session.
It you linked a transient object with another one (parent and cascaded) :
* if the parent is transient, save the parent and the child will be saved
* if the parent is persistent, the the child will be saved because of cascade.
You don't have to load the whole association tree.
Let's have A -> B -> C -> D
If I want to update D,
session.load(D);
//change D
//session.flush();
If I want to change D from a C
session.load(C)
c.setD(new D());
session.flush();
No need to load A.
Hope this help