code: @Override
  	public T save(T entity, boolean validateIntegrityConstraint, boolean preValidateReferentialConstraint, boolean postValidateReferentialConstraint) {
  		
  		// Si l'entite est nulle
  		if(entity == null) throw new JPersistenceToolsException("NullEntityException.message");
  		
  		// Generation des valeurs
  		generateEntityValues(entity, DAOMode.SAVE, DAOValidatorEvaluationTime.PRE_CONDITION);
  		
  		// Si on doit valider les contraintes d'integrites
  		if(validateIntegrityConstraint) validateEntityIntegrityConstraint(entity, DAOMode.SAVE, DAOValidatorEvaluationTime.PRE_CONDITION);
  		
  		// Si on doit pre-valider les contraintes referentielles
  		if(preValidateReferentialConstraint) validateEntityReferentialConstraint(entity, DAOMode.SAVE, DAOValidatorEvaluationTime.PRE_CONDITION);
  		
  		try {
  			
  			// Enregistrement
  			getEntityManager().persist(entity);
  			
  		} catch (Exception e) {
  			
  			// On relance
  			throw new JPersistenceToolsException("jpagenericdaorulesbased.save.error", e);
  		}
  		
  		// Validation de l'entite
  		if(postValidateReferentialConstraint) validateEntityReferentialConstraint(entity, DAOMode.SAVE, DAOValidatorEvaluationTime.POST_CONDITION);
  		
  		// On retourne l'entite enregistree
  		return entity;
  	}
docs: /*
  (non-Javadoc)
  @see net.leadware.persistence.tools.core.dao.JPAGenericDAO#save(java.lang.Object, boolean, boolean, boolean)