Session.delete() will remove an object's state from the database. Of course, your application might still hold a reference to a deleted object. It's best to think of
delete() as making a persistent instance transient.
You may delete objects in any order you like, without risk of foreign key constraint violations. It is still possible to violate a
NOT NULL constraint on a foreign key column by deleting objects in the wrong order, e.g. if you delete the parent, but forget to delete the children.