protected FlushMode applyFlushMode()

in grails-datastore-gorm-hibernate/src/main/groovy/org/grails/orm/hibernate/GrailsHibernateTemplate.java [653:700]


    protected FlushMode applyFlushMode(Session session, boolean existingTransaction) {
        if(isApplyFlushModeOnlyToNonExistingTransactions() && existingTransaction) {
            return null;
        }

        if (getFlushMode() == FLUSH_NEVER) {
            if (existingTransaction) {
                FlushMode previousFlushMode = session.getHibernateFlushMode();
                if (!previousFlushMode.lessThan(FlushMode.COMMIT)) {
                    session.setHibernateFlushMode(FlushMode.MANUAL);
                    return previousFlushMode;
                }
            } else {
                session.setHibernateFlushMode(FlushMode.MANUAL);
            }
        } else if (getFlushMode() == FLUSH_EAGER) {
            if (existingTransaction) {
                FlushMode previousFlushMode = session.getHibernateFlushMode();
                if (!previousFlushMode.equals(FlushMode.AUTO)) {
                    session.setHibernateFlushMode(FlushMode.AUTO);
                    return previousFlushMode;
                }
            } else {
                // rely on default FlushMode.AUTO
            }
        } else if (getFlushMode() == FLUSH_COMMIT) {
            if (existingTransaction) {
                FlushMode previousFlushMode = session.getHibernateFlushMode();
                if (previousFlushMode.equals(FlushMode.AUTO) || previousFlushMode.equals(FlushMode.ALWAYS)) {
                    session.setHibernateFlushMode(FlushMode.COMMIT);
                    return previousFlushMode;
                }
            } else {
                session.setHibernateFlushMode(FlushMode.COMMIT);
            }
        } else if (getFlushMode() == FLUSH_ALWAYS) {
            if (existingTransaction) {
                FlushMode previousFlushMode = session.getHibernateFlushMode();
                if (!previousFlushMode.equals(FlushMode.ALWAYS)) {
                    session.setHibernateFlushMode(FlushMode.ALWAYS);
                    return previousFlushMode;
                }
            } else {
                session.setHibernateFlushMode(FlushMode.ALWAYS);
            }
        }
        return null;
    }