Rejigged the link from the child node to the parent to point from the child node (rather than child node version). This restricts us to a design where we always create new nodes for new versions of a parent.
Also made the lookup of child nodes manual (rather than loaded automatically by hibernate). Doesn't use lazy loading - goes direct to database to find node. Not so nice.
But the changes have almost doubled the throughput in my testing.