I do not set a parent ref to null.  All I do is:
Code:
 
        Set userSalesRegions = editedUser.getSalesRegions();
        if (userSalesRegions == null) {
            userSalesRegions = new HashSet();
        }
if (!userSalesRegions.isEmpty()) {
            // Revoke the specified regions
            for (int i = 0; i < unassignedItems.length; i++) {
                String strRevokeRegionId = unassignedItems[i];
                int revokeRegionId = Integer.parseInt(strRevokeRegionId);
                SalesRegion revokedRegion = lookupManager.getSalesRegion(revokeRegionId);
                Iterator iterator = userSalesRegions.iterator();
                while (iterator.hasNext()) {
                    UserSalesRegion priorGrantedRegion = (UserSalesRegion) iterator.next();
                    if (revokedRegion.getId().equals(priorGrantedRegion.getSalesRegion().getId())) {
                        log.info("They were equal.  Revoking now");
                        iterator.remove();
                    }
                }
            }
        }
After this I just pass the editedUser object to the service layer's save, which leads to a hibernate saveOrUpdate(editedUser);
Hibernate will try to set the fk to null instead of doing a delete.  I do have a composite primary key on the child object, and other threads have hinted that this will not work due to a hibernate limitation.
Any insight?