private void trackContactChanges(Tag tag) { // tracking associated Contacts for (Contact contact : tag.getContactTags()) { final Contact contactBD = ContactManager.getDefault().getEntityById(contact.getId()); if (!contactBD.getTags().contains(tag)) { // FIXME aqui debería bastar con añadir el cambio o el tag al contacto y salvar el contacto // para que se actualizase con los listener de hibernate. Por algún motivo, sólo cuando se // da de alta // una nueva clave y se asocia a un contacto antes de guardar no funciona correctamente. EntityChange entityChange = contactBD.getEntityChange( Contact.FIELD_TAGS, "", tag.getName(), tag.getId().toString()); contactBD.addEntityChange(Contact.FIELD_TAGS, "", tag.getName(), tag.getId().toString()); // contactDAO.update(contactBD); if (entityChange != null) { entityChangeDAO.insert(entityChange); } } } // tracking deassociated Contacts if (tag.getId() != null) { Tag tagDB = getEntityById(tag.getId()); for (Contact contactDB : tagDB.getContactTags()) { if (!tag.getContactTags().contains(contactDB)) { contactDB.addEntityChange(Contact.FIELD_TAGS, tag.getName(), "", tag.getId().toString()); contactDAO.update(contactDB); } } } }