package br.mp.mprj.portal.portlet.gestaomensagens.service.service.persistence;

import br.mp.mprj.portal.portlet.gestaomensagens.service.NoSuchEmailDestinatarioException;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.EmailDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.impl.EmailDestinatarioImpl;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.impl.EmailDestinatarioModelImpl;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.persistence.EmailDestinatarioPersistence;

import com.liferay.portal.kernel.cache.CacheRegistryUtil;
import com.liferay.portal.kernel.dao.orm.EntityCacheUtil;
import com.liferay.portal.kernel.dao.orm.FinderCacheUtil;
import com.liferay.portal.kernel.dao.orm.FinderPath;
import com.liferay.portal.kernel.dao.orm.Query;
import com.liferay.portal.kernel.dao.orm.QueryPos;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.dao.orm.Session;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.InstanceFactory;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.PropsKeys;
import com.liferay.portal.kernel.util.PropsUtil;
import com.liferay.portal.kernel.util.SetUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.UnmodifiableList;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.uuid.PortalUUIDUtil;
import com.liferay.portal.model.CacheModel;
import com.liferay.portal.model.ModelListener;
import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;

import java.io.Serializable;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

/**
 * The persistence implementation for the email destinatario service.
 *
 * <p>
 * Caching information and settings can be found in <code>portal.properties</code>
 * </p>
 *
 * @author Henrique Simoes
 * @see EmailDestinatarioPersistence
 * @see EmailDestinatarioUtil
 * @generated
 */
public class EmailDestinatarioPersistenceImpl extends BasePersistenceImpl<EmailDestinatario>
    implements EmailDestinatarioPersistence {
    /*
     * NOTE FOR DEVELOPERS:
     *
     * Never modify or reference this class directly. Always use {@link EmailDestinatarioUtil} to access the email destinatario persistence. Modify <code>service.xml</code> and rerun ServiceBuilder to regenerate this class.
     */
    public static final String FINDER_CLASS_NAME_ENTITY = EmailDestinatarioImpl.class.getName();
    public static final String FINDER_CLASS_NAME_LIST_WITH_PAGINATION = FINDER_CLASS_NAME_ENTITY +
        ".List1";
    public static final String FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION = FINDER_CLASS_NAME_ENTITY +
        ".List2";
    public static final FinderPath FINDER_PATH_WITH_PAGINATION_FIND_ALL = new FinderPath(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
            EmailDestinatarioModelImpl.FINDER_CACHE_ENABLED,
            EmailDestinatarioImpl.class,
            FINDER_CLASS_NAME_LIST_WITH_PAGINATION, "findAll", new String[0]);
    public static final FinderPath FINDER_PATH_WITHOUT_PAGINATION_FIND_ALL = new FinderPath(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
            EmailDestinatarioModelImpl.FINDER_CACHE_ENABLED,
            EmailDestinatarioImpl.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION, "findAll", new String[0]);
    public static final FinderPath FINDER_PATH_COUNT_ALL = new FinderPath(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
            EmailDestinatarioModelImpl.FINDER_CACHE_ENABLED, Long.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION, "countAll", new String[0]);
    public static final FinderPath FINDER_PATH_WITH_PAGINATION_FIND_BY_UUID = new FinderPath(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
            EmailDestinatarioModelImpl.FINDER_CACHE_ENABLED,
            EmailDestinatarioImpl.class,
            FINDER_CLASS_NAME_LIST_WITH_PAGINATION, "findByUuid",
            new String[] {
                String.class.getName(),
                
            Integer.class.getName(), Integer.class.getName(),
                OrderByComparator.class.getName()
            });
    public static final FinderPath FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_UUID = new FinderPath(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
            EmailDestinatarioModelImpl.FINDER_CACHE_ENABLED,
            EmailDestinatarioImpl.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION, "findByUuid",
            new String[] { String.class.getName() },
            EmailDestinatarioModelImpl.UUID_COLUMN_BITMASK);
    public static final FinderPath FINDER_PATH_COUNT_BY_UUID = new FinderPath(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
            EmailDestinatarioModelImpl.FINDER_CACHE_ENABLED, Long.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION, "countByUuid",
            new String[] { String.class.getName() });
    private static final String _FINDER_COLUMN_UUID_UUID_1 = "emailDestinatario.uuid IS NULL";
    private static final String _FINDER_COLUMN_UUID_UUID_2 = "emailDestinatario.uuid = ?";
    private static final String _FINDER_COLUMN_UUID_UUID_3 = "(emailDestinatario.uuid IS NULL OR emailDestinatario.uuid = '')";
    public static final FinderPath FINDER_PATH_WITH_PAGINATION_FIND_BY_GRUPODESTINATARIOID =
        new FinderPath(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
            EmailDestinatarioModelImpl.FINDER_CACHE_ENABLED,
            EmailDestinatarioImpl.class,
            FINDER_CLASS_NAME_LIST_WITH_PAGINATION,
            "findByGrupoDestinatarioId",
            new String[] {
                Long.class.getName(),
                
            Integer.class.getName(), Integer.class.getName(),
                OrderByComparator.class.getName()
            });
    public static final FinderPath FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_GRUPODESTINATARIOID =
        new FinderPath(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
            EmailDestinatarioModelImpl.FINDER_CACHE_ENABLED,
            EmailDestinatarioImpl.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION,
            "findByGrupoDestinatarioId", new String[] { Long.class.getName() },
            EmailDestinatarioModelImpl.GRUPODESTINATARIOID_COLUMN_BITMASK);
    public static final FinderPath FINDER_PATH_COUNT_BY_GRUPODESTINATARIOID = new FinderPath(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
            EmailDestinatarioModelImpl.FINDER_CACHE_ENABLED, Long.class,
            FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION,
            "countByGrupoDestinatarioId", new String[] { Long.class.getName() });
    private static final String _FINDER_COLUMN_GRUPODESTINATARIOID_GRUPODESTINATARIOID_2 =
        "emailDestinatario.grupoDestinatarioId = ?";
    private static final String _SQL_SELECT_EMAILDESTINATARIO = "SELECT emailDestinatario FROM EmailDestinatario emailDestinatario";
    private static final String _SQL_SELECT_EMAILDESTINATARIO_WHERE = "SELECT emailDestinatario FROM EmailDestinatario emailDestinatario WHERE ";
    private static final String _SQL_COUNT_EMAILDESTINATARIO = "SELECT COUNT(emailDestinatario) FROM EmailDestinatario emailDestinatario";
    private static final String _SQL_COUNT_EMAILDESTINATARIO_WHERE = "SELECT COUNT(emailDestinatario) FROM EmailDestinatario emailDestinatario WHERE ";
    private static final String _ORDER_BY_ENTITY_ALIAS = "emailDestinatario.";
    private static final String _NO_SUCH_ENTITY_WITH_PRIMARY_KEY = "No EmailDestinatario exists with the primary key ";
    private static final String _NO_SUCH_ENTITY_WITH_KEY = "No EmailDestinatario exists with the key {";
    private static final boolean _HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE = GetterUtil.getBoolean(PropsUtil.get(
                PropsKeys.HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE));
    private static Log _log = LogFactoryUtil.getLog(EmailDestinatarioPersistenceImpl.class);
    private static Set<String> _badColumnNames = SetUtil.fromArray(new String[] {
                "uuid"
            });
    private static EmailDestinatario _nullEmailDestinatario = new EmailDestinatarioImpl() {
            @Override
            public Object clone() {
                return this;
            }

            @Override
            public CacheModel<EmailDestinatario> toCacheModel() {
                return _nullEmailDestinatarioCacheModel;
            }
        };

    private static CacheModel<EmailDestinatario> _nullEmailDestinatarioCacheModel =
        new CacheModel<EmailDestinatario>() {
            @Override
            public EmailDestinatario toEntityModel() {
                return _nullEmailDestinatario;
            }
        };

    public EmailDestinatarioPersistenceImpl() {
        setModelClass(EmailDestinatario.class);
    }

    /**
     * Returns all the email destinatarios where uuid = &#63;.
     *
     * @param uuid the uuid
     * @return the matching email destinatarios
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<EmailDestinatario> findByUuid(String uuid)
        throws SystemException {
        return findByUuid(uuid, QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);
    }

    /**
     * Returns a range of all the email destinatarios where uuid = &#63;.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link br.mp.mprj.portal.portlet.gestaomensagens.service.model.impl.EmailDestinatarioModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param uuid the uuid
     * @param start the lower bound of the range of email destinatarios
     * @param end the upper bound of the range of email destinatarios (not inclusive)
     * @return the range of matching email destinatarios
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<EmailDestinatario> findByUuid(String uuid, int start, int end)
        throws SystemException {
        return findByUuid(uuid, start, end, null);
    }

    /**
     * Returns an ordered range of all the email destinatarios where uuid = &#63;.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link br.mp.mprj.portal.portlet.gestaomensagens.service.model.impl.EmailDestinatarioModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param uuid the uuid
     * @param start the lower bound of the range of email destinatarios
     * @param end the upper bound of the range of email destinatarios (not inclusive)
     * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)
     * @return the ordered range of matching email destinatarios
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<EmailDestinatario> findByUuid(String uuid, int start, int end,
        OrderByComparator orderByComparator) throws SystemException {
        boolean pagination = true;
        FinderPath finderPath = null;
        Object[] finderArgs = null;

        if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS) &&
                (orderByComparator == null)) {
            pagination = false;
            finderPath = FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_UUID;
            finderArgs = new Object[] { uuid };
        } else {
            finderPath = FINDER_PATH_WITH_PAGINATION_FIND_BY_UUID;
            finderArgs = new Object[] { uuid, start, end, orderByComparator };
        }

        List<EmailDestinatario> list = (List<EmailDestinatario>) FinderCacheUtil.getResult(finderPath,
                finderArgs, this);

        if ((list != null) && !list.isEmpty()) {
            for (EmailDestinatario emailDestinatario : list) {
                if (!Validator.equals(uuid, emailDestinatario.getUuid())) {
                    list = null;

                    break;
                }
            }
        }

        if (list == null) {
            StringBundler query = null;

            if (orderByComparator != null) {
                query = new StringBundler(3 +
                        (orderByComparator.getOrderByFields().length * 3));
            } else {
                query = new StringBundler(3);
            }

            query.append(_SQL_SELECT_EMAILDESTINATARIO_WHERE);

            boolean bindUuid = false;

            if (uuid == null) {
                query.append(_FINDER_COLUMN_UUID_UUID_1);
            } else if (uuid.equals(StringPool.BLANK)) {
                query.append(_FINDER_COLUMN_UUID_UUID_3);
            } else {
                bindUuid = true;

                query.append(_FINDER_COLUMN_UUID_UUID_2);
            }

            if (orderByComparator != null) {
                appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS,
                    orderByComparator);
            } else
             if (pagination) {
                query.append(EmailDestinatarioModelImpl.ORDER_BY_JPQL);
            }

            String sql = query.toString();

            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(sql);

                QueryPos qPos = QueryPos.getInstance(q);

                if (bindUuid) {
                    qPos.add(uuid);
                }

                if (!pagination) {
                    list = (List<EmailDestinatario>) QueryUtil.list(q,
                            getDialect(), start, end, false);

                    Collections.sort(list);

                    list = new UnmodifiableList<EmailDestinatario>(list);
                } else {
                    list = (List<EmailDestinatario>) QueryUtil.list(q,
                            getDialect(), start, end);
                }

                cacheResult(list);

                FinderCacheUtil.putResult(finderPath, finderArgs, list);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(finderPath, finderArgs);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return list;
    }

    /**
     * Returns the first email destinatario in the ordered set where uuid = &#63;.
     *
     * @param uuid the uuid
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the first matching email destinatario
     * @throws br.mp.mprj.portal.portlet.gestaomensagens.service.NoSuchEmailDestinatarioException if a matching email destinatario could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario findByUuid_First(String uuid,
        OrderByComparator orderByComparator)
        throws NoSuchEmailDestinatarioException, SystemException {
        EmailDestinatario emailDestinatario = fetchByUuid_First(uuid,
                orderByComparator);

        if (emailDestinatario != null) {
            return emailDestinatario;
        }

        StringBundler msg = new StringBundler(4);

        msg.append(_NO_SUCH_ENTITY_WITH_KEY);

        msg.append("uuid=");
        msg.append(uuid);

        msg.append(StringPool.CLOSE_CURLY_BRACE);

        throw new NoSuchEmailDestinatarioException(msg.toString());
    }

    /**
     * Returns the first email destinatario in the ordered set where uuid = &#63;.
     *
     * @param uuid the uuid
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the first matching email destinatario, or <code>null</code> if a matching email destinatario could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario fetchByUuid_First(String uuid,
        OrderByComparator orderByComparator) throws SystemException {
        List<EmailDestinatario> list = findByUuid(uuid, 0, 1, orderByComparator);

        if (!list.isEmpty()) {
            return list.get(0);
        }

        return null;
    }

    /**
     * Returns the last email destinatario in the ordered set where uuid = &#63;.
     *
     * @param uuid the uuid
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the last matching email destinatario
     * @throws br.mp.mprj.portal.portlet.gestaomensagens.service.NoSuchEmailDestinatarioException if a matching email destinatario could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario findByUuid_Last(String uuid,
        OrderByComparator orderByComparator)
        throws NoSuchEmailDestinatarioException, SystemException {
        EmailDestinatario emailDestinatario = fetchByUuid_Last(uuid,
                orderByComparator);

        if (emailDestinatario != null) {
            return emailDestinatario;
        }

        StringBundler msg = new StringBundler(4);

        msg.append(_NO_SUCH_ENTITY_WITH_KEY);

        msg.append("uuid=");
        msg.append(uuid);

        msg.append(StringPool.CLOSE_CURLY_BRACE);

        throw new NoSuchEmailDestinatarioException(msg.toString());
    }

    /**
     * Returns the last email destinatario in the ordered set where uuid = &#63;.
     *
     * @param uuid the uuid
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the last matching email destinatario, or <code>null</code> if a matching email destinatario could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario fetchByUuid_Last(String uuid,
        OrderByComparator orderByComparator) throws SystemException {
        int count = countByUuid(uuid);

        if (count == 0) {
            return null;
        }

        List<EmailDestinatario> list = findByUuid(uuid, count - 1, count,
                orderByComparator);

        if (!list.isEmpty()) {
            return list.get(0);
        }

        return null;
    }

    /**
     * Returns the email destinatarios before and after the current email destinatario in the ordered set where uuid = &#63;.
     *
     * @param emailDestinatarioId the primary key of the current email destinatario
     * @param uuid the uuid
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the previous, current, and next email destinatario
     * @throws br.mp.mprj.portal.portlet.gestaomensagens.service.NoSuchEmailDestinatarioException if a email destinatario with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario[] findByUuid_PrevAndNext(
        long emailDestinatarioId, String uuid,
        OrderByComparator orderByComparator)
        throws NoSuchEmailDestinatarioException, SystemException {
        EmailDestinatario emailDestinatario = findByPrimaryKey(emailDestinatarioId);

        Session session = null;

        try {
            session = openSession();

            EmailDestinatario[] array = new EmailDestinatarioImpl[3];

            array[0] = getByUuid_PrevAndNext(session, emailDestinatario, uuid,
                    orderByComparator, true);

            array[1] = emailDestinatario;

            array[2] = getByUuid_PrevAndNext(session, emailDestinatario, uuid,
                    orderByComparator, false);

            return array;
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }
    }

    protected EmailDestinatario getByUuid_PrevAndNext(Session session,
        EmailDestinatario emailDestinatario, String uuid,
        OrderByComparator orderByComparator, boolean previous) {
        StringBundler query = null;

        if (orderByComparator != null) {
            query = new StringBundler(6 +
                    (orderByComparator.getOrderByFields().length * 6));
        } else {
            query = new StringBundler(3);
        }

        query.append(_SQL_SELECT_EMAILDESTINATARIO_WHERE);

        boolean bindUuid = false;

        if (uuid == null) {
            query.append(_FINDER_COLUMN_UUID_UUID_1);
        } else if (uuid.equals(StringPool.BLANK)) {
            query.append(_FINDER_COLUMN_UUID_UUID_3);
        } else {
            bindUuid = true;

            query.append(_FINDER_COLUMN_UUID_UUID_2);
        }

        if (orderByComparator != null) {
            String[] orderByConditionFields = orderByComparator.getOrderByConditionFields();

            if (orderByConditionFields.length > 0) {
                query.append(WHERE_AND);
            }

            for (int i = 0; i < orderByConditionFields.length; i++) {
                query.append(_ORDER_BY_ENTITY_ALIAS);
                query.append(orderByConditionFields[i]);

                if ((i + 1) < orderByConditionFields.length) {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(WHERE_GREATER_THAN_HAS_NEXT);
                    } else {
                        query.append(WHERE_LESSER_THAN_HAS_NEXT);
                    }
                } else {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(WHERE_GREATER_THAN);
                    } else {
                        query.append(WHERE_LESSER_THAN);
                    }
                }
            }

            query.append(ORDER_BY_CLAUSE);

            String[] orderByFields = orderByComparator.getOrderByFields();

            for (int i = 0; i < orderByFields.length; i++) {
                query.append(_ORDER_BY_ENTITY_ALIAS);
                query.append(orderByFields[i]);

                if ((i + 1) < orderByFields.length) {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(ORDER_BY_ASC_HAS_NEXT);
                    } else {
                        query.append(ORDER_BY_DESC_HAS_NEXT);
                    }
                } else {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(ORDER_BY_ASC);
                    } else {
                        query.append(ORDER_BY_DESC);
                    }
                }
            }
        } else {
            query.append(EmailDestinatarioModelImpl.ORDER_BY_JPQL);
        }

        String sql = query.toString();

        Query q = session.createQuery(sql);

        q.setFirstResult(0);
        q.setMaxResults(2);

        QueryPos qPos = QueryPos.getInstance(q);

        if (bindUuid) {
            qPos.add(uuid);
        }

        if (orderByComparator != null) {
            Object[] values = orderByComparator.getOrderByConditionValues(emailDestinatario);

            for (Object value : values) {
                qPos.add(value);
            }
        }

        List<EmailDestinatario> list = q.list();

        if (list.size() == 2) {
            return list.get(1);
        } else {
            return null;
        }
    }

    /**
     * Removes all the email destinatarios where uuid = &#63; from the database.
     *
     * @param uuid the uuid
     * @throws SystemException if a system exception occurred
     */
    @Override
    public void removeByUuid(String uuid) throws SystemException {
        for (EmailDestinatario emailDestinatario : findByUuid(uuid,
                QueryUtil.ALL_POS, QueryUtil.ALL_POS, null)) {
            remove(emailDestinatario);
        }
    }

    /**
     * Returns the number of email destinatarios where uuid = &#63;.
     *
     * @param uuid the uuid
     * @return the number of matching email destinatarios
     * @throws SystemException if a system exception occurred
     */
    @Override
    public int countByUuid(String uuid) throws SystemException {
        FinderPath finderPath = FINDER_PATH_COUNT_BY_UUID;

        Object[] finderArgs = new Object[] { uuid };

        Long count = (Long) FinderCacheUtil.getResult(finderPath, finderArgs,
                this);

        if (count == null) {
            StringBundler query = new StringBundler(2);

            query.append(_SQL_COUNT_EMAILDESTINATARIO_WHERE);

            boolean bindUuid = false;

            if (uuid == null) {
                query.append(_FINDER_COLUMN_UUID_UUID_1);
            } else if (uuid.equals(StringPool.BLANK)) {
                query.append(_FINDER_COLUMN_UUID_UUID_3);
            } else {
                bindUuid = true;

                query.append(_FINDER_COLUMN_UUID_UUID_2);
            }

            String sql = query.toString();

            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(sql);

                QueryPos qPos = QueryPos.getInstance(q);

                if (bindUuid) {
                    qPos.add(uuid);
                }

                count = (Long) q.uniqueResult();

                FinderCacheUtil.putResult(finderPath, finderArgs, count);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(finderPath, finderArgs);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return count.intValue();
    }

    /**
     * Returns all the email destinatarios where grupoDestinatarioId = &#63;.
     *
     * @param grupoDestinatarioId the grupo destinatario ID
     * @return the matching email destinatarios
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<EmailDestinatario> findByGrupoDestinatarioId(
        long grupoDestinatarioId) throws SystemException {
        return findByGrupoDestinatarioId(grupoDestinatarioId,
            QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);
    }

    /**
     * Returns a range of all the email destinatarios where grupoDestinatarioId = &#63;.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link br.mp.mprj.portal.portlet.gestaomensagens.service.model.impl.EmailDestinatarioModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param grupoDestinatarioId the grupo destinatario ID
     * @param start the lower bound of the range of email destinatarios
     * @param end the upper bound of the range of email destinatarios (not inclusive)
     * @return the range of matching email destinatarios
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<EmailDestinatario> findByGrupoDestinatarioId(
        long grupoDestinatarioId, int start, int end) throws SystemException {
        return findByGrupoDestinatarioId(grupoDestinatarioId, start, end, null);
    }

    /**
     * Returns an ordered range of all the email destinatarios where grupoDestinatarioId = &#63;.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link br.mp.mprj.portal.portlet.gestaomensagens.service.model.impl.EmailDestinatarioModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param grupoDestinatarioId the grupo destinatario ID
     * @param start the lower bound of the range of email destinatarios
     * @param end the upper bound of the range of email destinatarios (not inclusive)
     * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)
     * @return the ordered range of matching email destinatarios
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<EmailDestinatario> findByGrupoDestinatarioId(
        long grupoDestinatarioId, int start, int end,
        OrderByComparator orderByComparator) throws SystemException {
        boolean pagination = true;
        FinderPath finderPath = null;
        Object[] finderArgs = null;

        if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS) &&
                (orderByComparator == null)) {
            pagination = false;
            finderPath = FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_GRUPODESTINATARIOID;
            finderArgs = new Object[] { grupoDestinatarioId };
        } else {
            finderPath = FINDER_PATH_WITH_PAGINATION_FIND_BY_GRUPODESTINATARIOID;
            finderArgs = new Object[] {
                    grupoDestinatarioId,
                    
                    start, end, orderByComparator
                };
        }

        List<EmailDestinatario> list = (List<EmailDestinatario>) FinderCacheUtil.getResult(finderPath,
                finderArgs, this);

        if ((list != null) && !list.isEmpty()) {
            for (EmailDestinatario emailDestinatario : list) {
                if ((grupoDestinatarioId != emailDestinatario.getGrupoDestinatarioId())) {
                    list = null;

                    break;
                }
            }
        }

        if (list == null) {
            StringBundler query = null;

            if (orderByComparator != null) {
                query = new StringBundler(3 +
                        (orderByComparator.getOrderByFields().length * 3));
            } else {
                query = new StringBundler(3);
            }

            query.append(_SQL_SELECT_EMAILDESTINATARIO_WHERE);

            query.append(_FINDER_COLUMN_GRUPODESTINATARIOID_GRUPODESTINATARIOID_2);

            if (orderByComparator != null) {
                appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS,
                    orderByComparator);
            } else
             if (pagination) {
                query.append(EmailDestinatarioModelImpl.ORDER_BY_JPQL);
            }

            String sql = query.toString();

            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(sql);

                QueryPos qPos = QueryPos.getInstance(q);

                qPos.add(grupoDestinatarioId);

                if (!pagination) {
                    list = (List<EmailDestinatario>) QueryUtil.list(q,
                            getDialect(), start, end, false);

                    Collections.sort(list);

                    list = new UnmodifiableList<EmailDestinatario>(list);
                } else {
                    list = (List<EmailDestinatario>) QueryUtil.list(q,
                            getDialect(), start, end);
                }

                cacheResult(list);

                FinderCacheUtil.putResult(finderPath, finderArgs, list);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(finderPath, finderArgs);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return list;
    }

    /**
     * Returns the first email destinatario in the ordered set where grupoDestinatarioId = &#63;.
     *
     * @param grupoDestinatarioId the grupo destinatario ID
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the first matching email destinatario
     * @throws br.mp.mprj.portal.portlet.gestaomensagens.service.NoSuchEmailDestinatarioException if a matching email destinatario could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario findByGrupoDestinatarioId_First(
        long grupoDestinatarioId, OrderByComparator orderByComparator)
        throws NoSuchEmailDestinatarioException, SystemException {
        EmailDestinatario emailDestinatario = fetchByGrupoDestinatarioId_First(grupoDestinatarioId,
                orderByComparator);

        if (emailDestinatario != null) {
            return emailDestinatario;
        }

        StringBundler msg = new StringBundler(4);

        msg.append(_NO_SUCH_ENTITY_WITH_KEY);

        msg.append("grupoDestinatarioId=");
        msg.append(grupoDestinatarioId);

        msg.append(StringPool.CLOSE_CURLY_BRACE);

        throw new NoSuchEmailDestinatarioException(msg.toString());
    }

    /**
     * Returns the first email destinatario in the ordered set where grupoDestinatarioId = &#63;.
     *
     * @param grupoDestinatarioId the grupo destinatario ID
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the first matching email destinatario, or <code>null</code> if a matching email destinatario could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario fetchByGrupoDestinatarioId_First(
        long grupoDestinatarioId, OrderByComparator orderByComparator)
        throws SystemException {
        List<EmailDestinatario> list = findByGrupoDestinatarioId(grupoDestinatarioId,
                0, 1, orderByComparator);

        if (!list.isEmpty()) {
            return list.get(0);
        }

        return null;
    }

    /**
     * Returns the last email destinatario in the ordered set where grupoDestinatarioId = &#63;.
     *
     * @param grupoDestinatarioId the grupo destinatario ID
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the last matching email destinatario
     * @throws br.mp.mprj.portal.portlet.gestaomensagens.service.NoSuchEmailDestinatarioException if a matching email destinatario could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario findByGrupoDestinatarioId_Last(
        long grupoDestinatarioId, OrderByComparator orderByComparator)
        throws NoSuchEmailDestinatarioException, SystemException {
        EmailDestinatario emailDestinatario = fetchByGrupoDestinatarioId_Last(grupoDestinatarioId,
                orderByComparator);

        if (emailDestinatario != null) {
            return emailDestinatario;
        }

        StringBundler msg = new StringBundler(4);

        msg.append(_NO_SUCH_ENTITY_WITH_KEY);

        msg.append("grupoDestinatarioId=");
        msg.append(grupoDestinatarioId);

        msg.append(StringPool.CLOSE_CURLY_BRACE);

        throw new NoSuchEmailDestinatarioException(msg.toString());
    }

    /**
     * Returns the last email destinatario in the ordered set where grupoDestinatarioId = &#63;.
     *
     * @param grupoDestinatarioId the grupo destinatario ID
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the last matching email destinatario, or <code>null</code> if a matching email destinatario could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario fetchByGrupoDestinatarioId_Last(
        long grupoDestinatarioId, OrderByComparator orderByComparator)
        throws SystemException {
        int count = countByGrupoDestinatarioId(grupoDestinatarioId);

        if (count == 0) {
            return null;
        }

        List<EmailDestinatario> list = findByGrupoDestinatarioId(grupoDestinatarioId,
                count - 1, count, orderByComparator);

        if (!list.isEmpty()) {
            return list.get(0);
        }

        return null;
    }

    /**
     * Returns the email destinatarios before and after the current email destinatario in the ordered set where grupoDestinatarioId = &#63;.
     *
     * @param emailDestinatarioId the primary key of the current email destinatario
     * @param grupoDestinatarioId the grupo destinatario ID
     * @param orderByComparator the comparator to order the set by (optionally <code>null</code>)
     * @return the previous, current, and next email destinatario
     * @throws br.mp.mprj.portal.portlet.gestaomensagens.service.NoSuchEmailDestinatarioException if a email destinatario with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario[] findByGrupoDestinatarioId_PrevAndNext(
        long emailDestinatarioId, long grupoDestinatarioId,
        OrderByComparator orderByComparator)
        throws NoSuchEmailDestinatarioException, SystemException {
        EmailDestinatario emailDestinatario = findByPrimaryKey(emailDestinatarioId);

        Session session = null;

        try {
            session = openSession();

            EmailDestinatario[] array = new EmailDestinatarioImpl[3];

            array[0] = getByGrupoDestinatarioId_PrevAndNext(session,
                    emailDestinatario, grupoDestinatarioId, orderByComparator,
                    true);

            array[1] = emailDestinatario;

            array[2] = getByGrupoDestinatarioId_PrevAndNext(session,
                    emailDestinatario, grupoDestinatarioId, orderByComparator,
                    false);

            return array;
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }
    }

    protected EmailDestinatario getByGrupoDestinatarioId_PrevAndNext(
        Session session, EmailDestinatario emailDestinatario,
        long grupoDestinatarioId, OrderByComparator orderByComparator,
        boolean previous) {
        StringBundler query = null;

        if (orderByComparator != null) {
            query = new StringBundler(6 +
                    (orderByComparator.getOrderByFields().length * 6));
        } else {
            query = new StringBundler(3);
        }

        query.append(_SQL_SELECT_EMAILDESTINATARIO_WHERE);

        query.append(_FINDER_COLUMN_GRUPODESTINATARIOID_GRUPODESTINATARIOID_2);

        if (orderByComparator != null) {
            String[] orderByConditionFields = orderByComparator.getOrderByConditionFields();

            if (orderByConditionFields.length > 0) {
                query.append(WHERE_AND);
            }

            for (int i = 0; i < orderByConditionFields.length; i++) {
                query.append(_ORDER_BY_ENTITY_ALIAS);
                query.append(orderByConditionFields[i]);

                if ((i + 1) < orderByConditionFields.length) {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(WHERE_GREATER_THAN_HAS_NEXT);
                    } else {
                        query.append(WHERE_LESSER_THAN_HAS_NEXT);
                    }
                } else {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(WHERE_GREATER_THAN);
                    } else {
                        query.append(WHERE_LESSER_THAN);
                    }
                }
            }

            query.append(ORDER_BY_CLAUSE);

            String[] orderByFields = orderByComparator.getOrderByFields();

            for (int i = 0; i < orderByFields.length; i++) {
                query.append(_ORDER_BY_ENTITY_ALIAS);
                query.append(orderByFields[i]);

                if ((i + 1) < orderByFields.length) {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(ORDER_BY_ASC_HAS_NEXT);
                    } else {
                        query.append(ORDER_BY_DESC_HAS_NEXT);
                    }
                } else {
                    if (orderByComparator.isAscending() ^ previous) {
                        query.append(ORDER_BY_ASC);
                    } else {
                        query.append(ORDER_BY_DESC);
                    }
                }
            }
        } else {
            query.append(EmailDestinatarioModelImpl.ORDER_BY_JPQL);
        }

        String sql = query.toString();

        Query q = session.createQuery(sql);

        q.setFirstResult(0);
        q.setMaxResults(2);

        QueryPos qPos = QueryPos.getInstance(q);

        qPos.add(grupoDestinatarioId);

        if (orderByComparator != null) {
            Object[] values = orderByComparator.getOrderByConditionValues(emailDestinatario);

            for (Object value : values) {
                qPos.add(value);
            }
        }

        List<EmailDestinatario> list = q.list();

        if (list.size() == 2) {
            return list.get(1);
        } else {
            return null;
        }
    }

    /**
     * Removes all the email destinatarios where grupoDestinatarioId = &#63; from the database.
     *
     * @param grupoDestinatarioId the grupo destinatario ID
     * @throws SystemException if a system exception occurred
     */
    @Override
    public void removeByGrupoDestinatarioId(long grupoDestinatarioId)
        throws SystemException {
        for (EmailDestinatario emailDestinatario : findByGrupoDestinatarioId(
                grupoDestinatarioId, QueryUtil.ALL_POS, QueryUtil.ALL_POS, null)) {
            remove(emailDestinatario);
        }
    }

    /**
     * Returns the number of email destinatarios where grupoDestinatarioId = &#63;.
     *
     * @param grupoDestinatarioId the grupo destinatario ID
     * @return the number of matching email destinatarios
     * @throws SystemException if a system exception occurred
     */
    @Override
    public int countByGrupoDestinatarioId(long grupoDestinatarioId)
        throws SystemException {
        FinderPath finderPath = FINDER_PATH_COUNT_BY_GRUPODESTINATARIOID;

        Object[] finderArgs = new Object[] { grupoDestinatarioId };

        Long count = (Long) FinderCacheUtil.getResult(finderPath, finderArgs,
                this);

        if (count == null) {
            StringBundler query = new StringBundler(2);

            query.append(_SQL_COUNT_EMAILDESTINATARIO_WHERE);

            query.append(_FINDER_COLUMN_GRUPODESTINATARIOID_GRUPODESTINATARIOID_2);

            String sql = query.toString();

            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(sql);

                QueryPos qPos = QueryPos.getInstance(q);

                qPos.add(grupoDestinatarioId);

                count = (Long) q.uniqueResult();

                FinderCacheUtil.putResult(finderPath, finderArgs, count);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(finderPath, finderArgs);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return count.intValue();
    }

    /**
     * Caches the email destinatario in the entity cache if it is enabled.
     *
     * @param emailDestinatario the email destinatario
     */
    @Override
    public void cacheResult(EmailDestinatario emailDestinatario) {
        EntityCacheUtil.putResult(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
            EmailDestinatarioImpl.class, emailDestinatario.getPrimaryKey(),
            emailDestinatario);

        emailDestinatario.resetOriginalValues();
    }

    /**
     * Caches the email destinatarios in the entity cache if it is enabled.
     *
     * @param emailDestinatarios the email destinatarios
     */
    @Override
    public void cacheResult(List<EmailDestinatario> emailDestinatarios) {
        for (EmailDestinatario emailDestinatario : emailDestinatarios) {
            if (EntityCacheUtil.getResult(
                        EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
                        EmailDestinatarioImpl.class,
                        emailDestinatario.getPrimaryKey()) == null) {
                cacheResult(emailDestinatario);
            } else {
                emailDestinatario.resetOriginalValues();
            }
        }
    }

    /**
     * Clears the cache for all email destinatarios.
     *
     * <p>
     * The {@link com.liferay.portal.kernel.dao.orm.EntityCache} and {@link com.liferay.portal.kernel.dao.orm.FinderCache} are both cleared by this method.
     * </p>
     */
    @Override
    public void clearCache() {
        if (_HIBERNATE_CACHE_USE_SECOND_LEVEL_CACHE) {
            CacheRegistryUtil.clear(EmailDestinatarioImpl.class.getName());
        }

        EntityCacheUtil.clearCache(EmailDestinatarioImpl.class.getName());

        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_ENTITY);
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
    }

    /**
     * Clears the cache for the email destinatario.
     *
     * <p>
     * The {@link com.liferay.portal.kernel.dao.orm.EntityCache} and {@link com.liferay.portal.kernel.dao.orm.FinderCache} are both cleared by this method.
     * </p>
     */
    @Override
    public void clearCache(EmailDestinatario emailDestinatario) {
        EntityCacheUtil.removeResult(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
            EmailDestinatarioImpl.class, emailDestinatario.getPrimaryKey());

        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
    }

    @Override
    public void clearCache(List<EmailDestinatario> emailDestinatarios) {
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);

        for (EmailDestinatario emailDestinatario : emailDestinatarios) {
            EntityCacheUtil.removeResult(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
                EmailDestinatarioImpl.class, emailDestinatario.getPrimaryKey());
        }
    }

    /**
     * Creates a new email destinatario with the primary key. Does not add the email destinatario to the database.
     *
     * @param emailDestinatarioId the primary key for the new email destinatario
     * @return the new email destinatario
     */
    @Override
    public EmailDestinatario create(long emailDestinatarioId) {
        EmailDestinatario emailDestinatario = new EmailDestinatarioImpl();

        emailDestinatario.setNew(true);
        emailDestinatario.setPrimaryKey(emailDestinatarioId);

        String uuid = PortalUUIDUtil.generate();

        emailDestinatario.setUuid(uuid);

        return emailDestinatario;
    }

    /**
     * Removes the email destinatario with the primary key from the database. Also notifies the appropriate model listeners.
     *
     * @param emailDestinatarioId the primary key of the email destinatario
     * @return the email destinatario that was removed
     * @throws br.mp.mprj.portal.portlet.gestaomensagens.service.NoSuchEmailDestinatarioException if a email destinatario with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario remove(long emailDestinatarioId)
        throws NoSuchEmailDestinatarioException, SystemException {
        return remove((Serializable) emailDestinatarioId);
    }

    /**
     * Removes the email destinatario with the primary key from the database. Also notifies the appropriate model listeners.
     *
     * @param primaryKey the primary key of the email destinatario
     * @return the email destinatario that was removed
     * @throws br.mp.mprj.portal.portlet.gestaomensagens.service.NoSuchEmailDestinatarioException if a email destinatario with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario remove(Serializable primaryKey)
        throws NoSuchEmailDestinatarioException, SystemException {
        Session session = null;

        try {
            session = openSession();

            EmailDestinatario emailDestinatario = (EmailDestinatario) session.get(EmailDestinatarioImpl.class,
                    primaryKey);

            if (emailDestinatario == null) {
                if (_log.isWarnEnabled()) {
                    _log.warn(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY + primaryKey);
                }

                throw new NoSuchEmailDestinatarioException(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY +
                    primaryKey);
            }

            return remove(emailDestinatario);
        } catch (NoSuchEmailDestinatarioException nsee) {
            throw nsee;
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }
    }

    @Override
    protected EmailDestinatario removeImpl(EmailDestinatario emailDestinatario)
        throws SystemException {
        emailDestinatario = toUnwrappedModel(emailDestinatario);

        Session session = null;

        try {
            session = openSession();

            if (!session.contains(emailDestinatario)) {
                emailDestinatario = (EmailDestinatario) session.get(EmailDestinatarioImpl.class,
                        emailDestinatario.getPrimaryKeyObj());
            }

            if (emailDestinatario != null) {
                session.delete(emailDestinatario);
            }
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }

        if (emailDestinatario != null) {
            clearCache(emailDestinatario);
        }

        return emailDestinatario;
    }

    @Override
    public EmailDestinatario updateImpl(
        br.mp.mprj.portal.portlet.gestaomensagens.service.model.EmailDestinatario emailDestinatario)
        throws SystemException {
        emailDestinatario = toUnwrappedModel(emailDestinatario);

        boolean isNew = emailDestinatario.isNew();

        EmailDestinatarioModelImpl emailDestinatarioModelImpl = (EmailDestinatarioModelImpl) emailDestinatario;

        if (Validator.isNull(emailDestinatario.getUuid())) {
            String uuid = PortalUUIDUtil.generate();

            emailDestinatario.setUuid(uuid);
        }

        Session session = null;

        try {
            session = openSession();

            if (emailDestinatario.isNew()) {
                session.save(emailDestinatario);

                emailDestinatario.setNew(false);
            } else {
                session.merge(emailDestinatario);
            }
        } catch (Exception e) {
            throw processException(e);
        } finally {
            closeSession(session);
        }

        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);

        if (isNew || !EmailDestinatarioModelImpl.COLUMN_BITMASK_ENABLED) {
            FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
        }
        else {
            if ((emailDestinatarioModelImpl.getColumnBitmask() &
                    FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_UUID.getColumnBitmask()) != 0) {
                Object[] args = new Object[] {
                        emailDestinatarioModelImpl.getOriginalUuid()
                    };

                FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_UUID, args);
                FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_UUID,
                    args);

                args = new Object[] { emailDestinatarioModelImpl.getUuid() };

                FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_UUID, args);
                FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_UUID,
                    args);
            }

            if ((emailDestinatarioModelImpl.getColumnBitmask() &
                    FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_GRUPODESTINATARIOID.getColumnBitmask()) != 0) {
                Object[] args = new Object[] {
                        emailDestinatarioModelImpl.getOriginalGrupoDestinatarioId()
                    };

                FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_GRUPODESTINATARIOID,
                    args);
                FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_GRUPODESTINATARIOID,
                    args);

                args = new Object[] {
                        emailDestinatarioModelImpl.getGrupoDestinatarioId()
                    };

                FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_GRUPODESTINATARIOID,
                    args);
                FinderCacheUtil.removeResult(FINDER_PATH_WITHOUT_PAGINATION_FIND_BY_GRUPODESTINATARIOID,
                    args);
            }
        }

        EntityCacheUtil.putResult(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
            EmailDestinatarioImpl.class, emailDestinatario.getPrimaryKey(),
            emailDestinatario);

        return emailDestinatario;
    }

    protected EmailDestinatario toUnwrappedModel(
        EmailDestinatario emailDestinatario) {
        if (emailDestinatario instanceof EmailDestinatarioImpl) {
            return emailDestinatario;
        }

        EmailDestinatarioImpl emailDestinatarioImpl = new EmailDestinatarioImpl();

        emailDestinatarioImpl.setNew(emailDestinatario.isNew());
        emailDestinatarioImpl.setPrimaryKey(emailDestinatario.getPrimaryKey());

        emailDestinatarioImpl.setUuid(emailDestinatario.getUuid());
        emailDestinatarioImpl.setEmailDestinatarioId(emailDestinatario.getEmailDestinatarioId());
        emailDestinatarioImpl.setEmail(emailDestinatario.getEmail());
        emailDestinatarioImpl.setGrupoDestinatarioId(emailDestinatario.getGrupoDestinatarioId());

        return emailDestinatarioImpl;
    }

    /**
     * Returns the email destinatario with the primary key or throws a {@link com.liferay.portal.NoSuchModelException} if it could not be found.
     *
     * @param primaryKey the primary key of the email destinatario
     * @return the email destinatario
     * @throws br.mp.mprj.portal.portlet.gestaomensagens.service.NoSuchEmailDestinatarioException if a email destinatario with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario findByPrimaryKey(Serializable primaryKey)
        throws NoSuchEmailDestinatarioException, SystemException {
        EmailDestinatario emailDestinatario = fetchByPrimaryKey(primaryKey);

        if (emailDestinatario == null) {
            if (_log.isWarnEnabled()) {
                _log.warn(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY + primaryKey);
            }

            throw new NoSuchEmailDestinatarioException(_NO_SUCH_ENTITY_WITH_PRIMARY_KEY +
                primaryKey);
        }

        return emailDestinatario;
    }

    /**
     * Returns the email destinatario with the primary key or throws a {@link br.mp.mprj.portal.portlet.gestaomensagens.service.NoSuchEmailDestinatarioException} if it could not be found.
     *
     * @param emailDestinatarioId the primary key of the email destinatario
     * @return the email destinatario
     * @throws br.mp.mprj.portal.portlet.gestaomensagens.service.NoSuchEmailDestinatarioException if a email destinatario with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario findByPrimaryKey(long emailDestinatarioId)
        throws NoSuchEmailDestinatarioException, SystemException {
        return findByPrimaryKey((Serializable) emailDestinatarioId);
    }

    /**
     * Returns the email destinatario with the primary key or returns <code>null</code> if it could not be found.
     *
     * @param primaryKey the primary key of the email destinatario
     * @return the email destinatario, or <code>null</code> if a email destinatario with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario fetchByPrimaryKey(Serializable primaryKey)
        throws SystemException {
        EmailDestinatario emailDestinatario = (EmailDestinatario) EntityCacheUtil.getResult(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
                EmailDestinatarioImpl.class, primaryKey);

        if (emailDestinatario == _nullEmailDestinatario) {
            return null;
        }

        if (emailDestinatario == null) {
            Session session = null;

            try {
                session = openSession();

                emailDestinatario = (EmailDestinatario) session.get(EmailDestinatarioImpl.class,
                        primaryKey);

                if (emailDestinatario != null) {
                    cacheResult(emailDestinatario);
                } else {
                    EntityCacheUtil.putResult(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
                        EmailDestinatarioImpl.class, primaryKey,
                        _nullEmailDestinatario);
                }
            } catch (Exception e) {
                EntityCacheUtil.removeResult(EmailDestinatarioModelImpl.ENTITY_CACHE_ENABLED,
                    EmailDestinatarioImpl.class, primaryKey);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return emailDestinatario;
    }

    /**
     * Returns the email destinatario with the primary key or returns <code>null</code> if it could not be found.
     *
     * @param emailDestinatarioId the primary key of the email destinatario
     * @return the email destinatario, or <code>null</code> if a email destinatario with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public EmailDestinatario fetchByPrimaryKey(long emailDestinatarioId)
        throws SystemException {
        return fetchByPrimaryKey((Serializable) emailDestinatarioId);
    }

    /**
     * Returns all the email destinatarios.
     *
     * @return the email destinatarios
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<EmailDestinatario> findAll() throws SystemException {
        return findAll(QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);
    }

    /**
     * Returns a range of all the email destinatarios.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link br.mp.mprj.portal.portlet.gestaomensagens.service.model.impl.EmailDestinatarioModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param start the lower bound of the range of email destinatarios
     * @param end the upper bound of the range of email destinatarios (not inclusive)
     * @return the range of email destinatarios
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<EmailDestinatario> findAll(int start, int end)
        throws SystemException {
        return findAll(start, end, null);
    }

    /**
     * Returns an ordered range of all the email destinatarios.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link br.mp.mprj.portal.portlet.gestaomensagens.service.model.impl.EmailDestinatarioModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param start the lower bound of the range of email destinatarios
     * @param end the upper bound of the range of email destinatarios (not inclusive)
     * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)
     * @return the ordered range of email destinatarios
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<EmailDestinatario> findAll(int start, int end,
        OrderByComparator orderByComparator) throws SystemException {
        boolean pagination = true;
        FinderPath finderPath = null;
        Object[] finderArgs = null;

        if ((start == QueryUtil.ALL_POS) && (end == QueryUtil.ALL_POS) &&
                (orderByComparator == null)) {
            pagination = false;
            finderPath = FINDER_PATH_WITHOUT_PAGINATION_FIND_ALL;
            finderArgs = FINDER_ARGS_EMPTY;
        } else {
            finderPath = FINDER_PATH_WITH_PAGINATION_FIND_ALL;
            finderArgs = new Object[] { start, end, orderByComparator };
        }

        List<EmailDestinatario> list = (List<EmailDestinatario>) FinderCacheUtil.getResult(finderPath,
                finderArgs, this);

        if (list == null) {
            StringBundler query = null;
            String sql = null;

            if (orderByComparator != null) {
                query = new StringBundler(2 +
                        (orderByComparator.getOrderByFields().length * 3));

                query.append(_SQL_SELECT_EMAILDESTINATARIO);

                appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS,
                    orderByComparator);

                sql = query.toString();
            } else {
                sql = _SQL_SELECT_EMAILDESTINATARIO;

                if (pagination) {
                    sql = sql.concat(EmailDestinatarioModelImpl.ORDER_BY_JPQL);
                }
            }

            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(sql);

                if (!pagination) {
                    list = (List<EmailDestinatario>) QueryUtil.list(q,
                            getDialect(), start, end, false);

                    Collections.sort(list);

                    list = new UnmodifiableList<EmailDestinatario>(list);
                } else {
                    list = (List<EmailDestinatario>) QueryUtil.list(q,
                            getDialect(), start, end);
                }

                cacheResult(list);

                FinderCacheUtil.putResult(finderPath, finderArgs, list);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(finderPath, finderArgs);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return list;
    }

    /**
     * Removes all the email destinatarios from the database.
     *
     * @throws SystemException if a system exception occurred
     */
    @Override
    public void removeAll() throws SystemException {
        for (EmailDestinatario emailDestinatario : findAll()) {
            remove(emailDestinatario);
        }
    }

    /**
     * Returns the number of email destinatarios.
     *
     * @return the number of email destinatarios
     * @throws SystemException if a system exception occurred
     */
    @Override
    public int countAll() throws SystemException {
        Long count = (Long) FinderCacheUtil.getResult(FINDER_PATH_COUNT_ALL,
                FINDER_ARGS_EMPTY, this);

        if (count == null) {
            Session session = null;

            try {
                session = openSession();

                Query q = session.createQuery(_SQL_COUNT_EMAILDESTINATARIO);

                count = (Long) q.uniqueResult();

                FinderCacheUtil.putResult(FINDER_PATH_COUNT_ALL,
                    FINDER_ARGS_EMPTY, count);
            } catch (Exception e) {
                FinderCacheUtil.removeResult(FINDER_PATH_COUNT_ALL,
                    FINDER_ARGS_EMPTY);

                throw processException(e);
            } finally {
                closeSession(session);
            }
        }

        return count.intValue();
    }

    @Override
    protected Set<String> getBadColumnNames() {
        return _badColumnNames;
    }

    /**
     * Initializes the email destinatario persistence.
     */
    public void afterPropertiesSet() {
        String[] listenerClassNames = StringUtil.split(GetterUtil.getString(
                    com.liferay.util.service.ServiceProps.get(
                        "value.object.listener.br.mp.mprj.portal.portlet.gestaomensagens.service.model.EmailDestinatario")));

        if (listenerClassNames.length > 0) {
            try {
                List<ModelListener<EmailDestinatario>> listenersList = new ArrayList<ModelListener<EmailDestinatario>>();

                for (String listenerClassName : listenerClassNames) {
                    listenersList.add((ModelListener<EmailDestinatario>) InstanceFactory.newInstance(
                            getClassLoader(), listenerClassName));
                }

                listeners = listenersList.toArray(new ModelListener[listenersList.size()]);
            } catch (Exception e) {
                _log.error(e);
            }
        }
    }

    public void destroy() {
        EntityCacheUtil.removeCache(EmailDestinatarioImpl.class.getName());
        FinderCacheUtil.removeCache(FINDER_CLASS_NAME_ENTITY);
        FinderCacheUtil.removeCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
        FinderCacheUtil.removeCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
    }
}
