In my app I have these Hibernate-mapped types (general case):
class RoleRule {
private Role role;
private PermissionAwareEntity entity; // hibernate-mapp
Brian Deterling's answer helped me to overcome the phantom delete. I wish he had put a real code. Here is what I got from his suggestion 1. Posting for someone to use it or to comment my code.
// snFile and task share many to many relationship
@PersistenceContext
private EntityManager em;
public SnFile merge(SnFile snFile) {
log.debug("Request to merge SnFile : {}", snFile);
Set tasks = taskService.findBySnFilesId(snFile.getId());
if(snFile.getTasks() != null) {
snFile.getTasks().clear();
}
em.merge(snFile);
em.flush();
if(tasks != null) {
if(snFile.getTasks() != null)
snFile.getTasks().addAll(tasks);
else
snFile.setTasks(tasks);
}
return em.merge(snFile);
}