Well, your mapping will have an affect on how that runs. But first, I would choose to use session.saveOrUpdate() instead of calling insert().
The second is how deep do you need to keep that object filled. You could make a different instance, that is only as deep as you need it to be, to be inserted and/or updated. (cascade options also could have an affect on what you are seeing)
A lot of what you are seeing, has to do with where this object was created, was it within a session? Is it being managed completely by Hibernate at that point? How are those relationships objects, how are they mapped, and do those objects have ids already in them or not. If they do have ids already, and the call to insert is the first time Hibernate will get to manage the object, then Hibernate has no idea if those child objects need to be updated or inserted or not, and therefore needs to run a query to the database to check.
These are all conjecture at this point because I would need to see all the config and mappings and code that built up this object.
Mark