Checking for duplicates before EntityHome.update() fails
dhinojosa Apr 2, 2009 9:17 PMI can't believe I have encountered this yet.
I have a unique constraint on a field called 'value' in an Entity called 'Assumption'. I can successfully determine if the a duplicate is being entered for persist().
@SuppressWarnings({"UnusedAssignment"})
    @Override
    @Transactional
    public String persist() {
        try {
            Query query = getEntityManager().createQuery("SELECT a from Assumption a where a.value = :value");
            query.setParameter("value", getInstance().getValue());
            query.getSingleResult();
            getStatusMessages().addFromResourceBundleOrDefault(
                    StatusMessage.Severity.ERROR,
                    "assumptionNotUnique",
                    "The assumption \'{0}\' has already been entered",
                    getInstance().getValue());
            return "failure";
        } catch (NoResultException nre) {
            getInstance().setCreatedDate(calendar);
            getInstance().setUpdatedDate(calendar);
            return super.persist();
        }
    }
but when I use similar logic for update() I get an exception, and it is perplexing.
 @Override
    @Transactional
    public String update() {
        try {
            Query query = getEntityManager().createQuery("SELECT a from Assumption a where a.value = :value");
            query.setParameter("value", getInstance().getValue());
            Assumption assumption = (Assumption) query.getSingleResult();
            if (!(getInstance().getId().equals(assumption.getId()))) {
                getStatusMessages().addFromResourceBundleOrDefault(
                        StatusMessage.Severity.ERROR,
                        "assumptionNotUnique",
                        "The assumption \'{0}\' has already been entered",
                        getInstance().getValue());
                return "failure";
            }
            getInstance().setUpdatedDate(calendar);
            return super.update();
        } catch (NoResultException nre) {
            getInstance().setUpdatedDate(calendar);
            return super.update();
        } catch (RuntimeException re) {
            re.printStackTrace();
            return "failure";
        }
    }
The issue is that Assumption assumption = (Assumption) query.getSingleResult(); is not running nor does it provide any message as to why it doesn't.  Any ideas?
 
    