/** {@inheritDoc} */ @Transactional(rollbackFor = {Throwable.class}) public void deleteSavedSearch(Long userProfileId, Long savedSearchId) { UserProfile userProfile = (UserProfile) DataAccessUtils.uniqueResult( hibernateTemplate.findByCriteria( DetachedCriteria.forClass(UserProfile.class) .add(Restrictions.eq("ID", userProfileId)) .setFetchMode("savedSearches", FetchMode.JOIN) .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY))); List<SavedSearch> savedSearches = userProfile.getSavedSearches(); for (Iterator<SavedSearch> it = savedSearches.iterator(); it.hasNext(); ) { SavedSearch savedSearch = it.next(); if (savedSearch.getID().equals(savedSearchId)) { it.remove(); } } hibernateTemplate.update(userProfile); }