## org.codehaus.groovy.grails.orm.hibernate.metaclass
Class AbstractSavePersistentMethod

    java.lang.Object
      org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicMethodInvocation
          org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractDynamicPersistentMethod
              org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractSavePersistentMethod

All Implemented Interfaces:
  DynamicMethodInvocation

Direct Known Subclasses:
  MergePersistentMethod, SavePersistentMethod

    public abstract class AbstractSavePersistentMethod

extends AbstractDynamicPersistentMethod

Abstract class for different implementations that perform saving to implement

Since:
  0.3
Author:
  Graeme Rocher

Constructor Summary
`AbstractSavePersistentMethod(Pattern pattern, org.hibernate.SessionFactory sessionFactory, ClassLoader classLoader, GrailsApplication application)`

Method Summary
`protected Object` `doInvokeInternal(Object target, Object[] arguments)`
`protected Object` `handleValidationError(Object target, Errors errors)` This method willl set the save() method will set the flush mode to manual.
`protected abstract Object` `performInsert(Object target, boolean shouldFlush)` Subclasses should override and perform an insert operation, flushing the session if the second argument is true
`protected abstract Object` `performSave(Object target, boolean shouldFlush)` Subclasses should override and perform a save operation, flushing the session if the second argument is true
`protected void` `setErrorsOnInstance(Object target, Errors errors)` Associates the Errors object on the instance

Methods inherited from class org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractDynamicPersistentMethod
`getHibernateTemplate, invoke, setObjectToReadOnly, setObjectToReadWrite`

Methods inherited from class org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicMethodInvocation
`getPattern, isMethodMatch, setPattern`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### AbstractSavePersistentMethod

    public AbstractSavePersistentMethod(Pattern pattern,
                                        org.hibernate.SessionFactory sessionFactory,
                                        ClassLoader classLoader,
                                        GrailsApplication application)

Method Detail

### doInvokeInternal

    protected Object doInvokeInternal(Object target,
                                      Object[] arguments)

  Specified by:
    `doInvokeInternal` in class `AbstractDynamicPersistentMethod`

### handleValidationError

    protected Object handleValidationError(Object target,
                                           Errors errors)

  This method willl set the save() method will set the flush mode to manual. What this does is ensure that the database changes are not persisted to the database if a validation error occurs. If save() is called again and validation passes the code will check if there is a manual flush mode and flush manually if necessary

  Parameters:
    `target` - The target object that failed validation
    `errors` - The Errors instance
  Returns:
    This method will return null signaling a validation failure

### setErrorsOnInstance

    protected void setErrorsOnInstance(Object target,
                                       Errors errors)

  Associates the Errors object on the instance

  Parameters:
    `target` - The target instance
    `errors` - The Errors object

### performSave

    protected abstract Object performSave(Object target,
                                          boolean shouldFlush)

  Subclasses should override and perform a save operation, flushing the session if the second argument is true

  Parameters:
    `target` - The target object to save
    `shouldFlush` - Whether to flush
  Returns:
    The target object

### performInsert

    protected abstract Object performInsert(Object target,
                                            boolean shouldFlush)

  Subclasses should override and perform an insert operation, flushing the session if the second argument is true

  Parameters:
    `target` - The target object to save
    `shouldFlush` - Whether to flush
  Returns:
    The target object

Copyright (c) 2005-2009 The Grails project