@Override
  public List<RoleUsuariEntitat> selectFullWithEntitat(
      Where where, final OrderBy[] orderBy, final Integer itemsPerPage, final int inici)
      throws I18NException {

    List<RoleUsuariEntitat> list;
    if (itemsPerPage == null) {
      list = this.select(where, orderBy);
    } else {
      list = this.select(where, inici, itemsPerPage, orderBy);
    }

    for (RoleUsuariEntitat rue : list) {
      RoleUsuariEntitatJPA rueJPA = (RoleUsuariEntitatJPA) rue;
      Hibernate.initialize(rueJPA.getUsuariEntitat());
      Hibernate.initialize(rueJPA.getUsuariEntitat().getEntitat());
    }

    return list;
  }
  @Override
  @RolesAllowed({PFI_ADMIN})
  public void deleteFull(String usuariEntitatID, String roleID) throws Exception, I18NException {

    // Validar parametres
    Long id =
        executeQueryOne(
            ID, Where.AND(USUARIENTITATID.equal(usuariEntitatID), ROLEID.equal(roleID)));
    if (id == null) {
      return;
    }

    RoleUsuariEntitatJPA instance = new RoleUsuariEntitatJPA();
    instance.setUsuariEntitatID(usuariEntitatID);
    instance.setRoleID(roleID);
    instance.setId(id);

    RoleUsuariEntitatBeanValidator bv;
    bv = new RoleUsuariEntitatBeanValidator(validator, roleEjb, this, usuariEntitatEjb);

    final boolean isNou = false;
    List<I18NFieldError> errors = bv.validate(instance, isNou);

    if (!errors.isEmpty()) {
      throw new I18NException(errors.get(0).getTranslation());
    }

    // Mirar si existeix i obtenir ID
    List<RoleUsuariEntitat> list =
        select(Where.AND(USUARIENTITATID.equal(usuariEntitatID), ROLEID.equal(roleID)));

    if (list.isEmpty()) {
      return;
    }

    instance = (RoleUsuariEntitatJPA) list.get(0);

    if (Constants.ROLE_ADEN.equals(roleID)) {
      // NO es pot borrar el role ADEN si és el darrer administrador d'entitat d'una entitat

      // 1. recuperar de usuarientitat la entrada con usuarientitatid ==
      // instance.getUsuariEntitatID()
      UsuariEntitat usuariEntitat =
          usuariEntitatEjb.findByPrimaryKey(instance.getUsuariEntitatID());
      // 2. de la entrada anterior, obtener el entitatid
      String entitatID = usuariEntitat.getEntitatID();
      // 3. Conjunto de usuarientitatid con entitatid == entitatID
      SubQuery<UsuariEntitat, String> subQ =
          usuariEntitatEjb.getSubQuery(
              UsuariEntitatFields.USUARIENTITATID, UsuariEntitatFields.ENTITATID.equal(entitatID));
      // 3.1 Columna USUARIENTITATID
      Where w1 = USUARIENTITATID.in(subQ);
      // 3.2 Columna ROLEID
      Where w2 = ROLEID.equal(Constants.ROLE_ADEN);
      // 3.3 Combinamos las condiciones anteriores
      Where w = Where.AND(w1, w2);

      // 4. si es mayor que 1, entonces eliminar de rolesuarientitat la entrada con usuarientitatid
      // == instance.getUsuariEntitatID()

      if (count(w) == 1) {
        throw new I18NException(
            "roleusuarientitat.aden.error.esunic", usuariEntitat.getUsuariPersonaID());
      }
    }

    if (Constants.ROLE_SOLI.equals(roleID)) {
      // No es pot borrar el role SOLI si l'usuari té solicituds de firma associades
      Long count =
          peticioDeFirmaEjb.count(
              es.caib.portafib.model.fields.PeticioDeFirmaFields.USUARIENTITATID.equal(
                  instance.getUsuariEntitatID()));
      if (count != 0) {
        throw new I18NException("roleusuarientitat.solicitant.error.tepeticionsdefirma");
      }
    }

    // DEST mentre tengui firmes pendents

    // TODO faltan checks para los demás roles

    super.delete(instance);
  }