gt: 		if(usuario!=null && usuario.getId()!=null){
context: /*******************************************************************************
   * This file is part of Educatio.
   *
   *     Educatio is free software: you can redistribute it and/or modify
   *     it under the terms of the GNU General Public License as published by
   *     the Free Software Foundation, either version 3 of the License, or
   *     (at your option) any later version.
   *
   *     Educatio is distributed in the hope that it will be useful,
   *     but WITHOUT ANY WARRANTY; without even the implied warranty of
   *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   *     GNU General Public License for more details.
   *
   *     You should have received a copy of the GNU General Public License
   *     along with Educatio.  If not, see <http://www.gnu.org/licenses/>.
   *     
   *     Authors:
   *           Filipe Marinho de Brito - filipe.marinho.brito@gmail.com
   *           Rodrigo de Souza Ataides - rodrigoataides@gmail.com
   *******************************************************************************/
  package br.com.core.business.persistencia; 
  
  import java.util.ArrayList;
  import java.util.List;
  
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.security.access.AccessDeniedException;
  import org.springframework.stereotype.Service;
  import org.springframework.transaction.annotation.Propagation;
  import org.springframework.transaction.annotation.Transactional;
  
  import br.com.core.conversor.ExperienciaProfissionalConversor;
  import br.com.core.conversor.UsuarioConversor;
  import br.com.core.jdbc.dao.pessoa.PessoaRepository;
  import br.com.core.jdbc.dao.publico.LogRepository;
  import br.com.core.jdbc.dao.publico.PerfilRepository;
  import br.com.core.jdbc.dao.publico.UsuarioPerfilRepository;
  import br.com.core.jdbc.dao.publico.UsuarioPerfilTable;
  import br.com.core.jdbc.dao.publico.UsuarioRepository;
  import br.com.core.jdbc.dao.publico.UsuarioTable;
  import br.com.core.security.modelo.Perfil;
  import br.com.core.security.modelo.Usuario;
  
  @Service
  public class UsuarioPersistenciaBusiness {
  
  	@Autowired
  	PessoaRepository pessoaRepository;
  	@Autowired
  	UsuarioRepository usuarioRepository;
  	@Autowired
  	PerfilRepository perfilRepository;
  	@Autowired
  	UsuarioPerfilRepository usuarioPerfilRepository;
  	@Autowired
  	LogRepository logRepository;
  	@Autowired
  	PerfilPersistenciaBusiness perfilPersistenciaBusiness;
  	@Autowired
  	PessoaPersistenciaBusiness pessoaPersistenciaBusiness;
  
  	@Transactional(readOnly = true, propagation=Propagation.NESTED)
  	//@PostAuthorize("hasPermission(returnObject, 'READ') or principal.username == returnObject.username")
  	public Usuario find(Long id){
  		return find(new Usuario(id));
  	}
  
  	@Transactional(readOnly = true, propagation=Propagation.NESTED)
  	//@PostAuthorize("hasPermission(returnObject, 'READ') or principal.username == returnObject.username")
  	public Usuario find(Usuario usuario){
  		if(usuario!=null && usuario.getId()!=null){
  			UsuarioTable usuarioTable  = usuarioRepository.findOne(usuario.getId()); 
  			usuario = UsuarioConversor.converterTabelaParaModelo(usuarioTable);
  			try{usuario.setPerfis(perfilPersistenciaBusiness.findByUsuario(usuario));}catch(AccessDeniedException ade){}
  			//tratamento mapped by one to one
  			if(usuario.getPessoa()==null || usuario.getPessoa().getId()==null){
  				try{usuario.setPessoa(pessoaPersistenciaBusiness.findByUsuario(usuario));}catch(AccessDeniedException ade){ }
  			}
  		}
  		return usuario;
  	}
  
  	@Transactional(readOnly = true, propagation=Propagation.NESTED)
  	//@PostFilter("hasPermission(filterObject, 'READ')")
  	public  List<Usuario> findUsersByPerfil(Long long0){
  		List<Usuario> retorno = new ArrayList<Usuario>();
  		for(UsuarioTable usuarioTable : usuarioRepository.findUsersByPerfil(long0)){
  			retorno.add(find(UsuarioConversor.converterTabelaParaModelo(usuarioTable)));
  		}
  		 return retorno;
  	}
  
  	@Transactional(readOnly = true, propagation=Propagation.NESTED)
  //	//@PostAuthorize("hasPermission(returnObject, 'READ')")
  	public Usuario findUsuarioByUsernameEquals(String string0){
  		return find(UsuarioConversor.converterTabelaParaModelo(usuarioRepository.findUsuarioByUsernameEquals(string0)));
  	}
  
  	@Transactional(rollbackFor=Throwable.class, propagation=Propagation.NESTED)
  	public void updatePasswordByEmail(Usuario usuario){
  		UsuarioTable usuarioTable  = UsuarioConversor.converterModeloParaTabela(usuario); 
  		usuarioRepository.updatePasswordByEmail(usuarioTable);
  	}
  
  	@Transactional(rollbackFor=Throwable.class, propagation=Propagation.NESTED)
  	//@PreAuthorize("hasPermission(#usuario, 'WRITE') or principal.username == #usuario.username")
  	public void updatePasswordBySystem(Usuario usuario){
  		UsuarioTable usuarioTable  = UsuarioConversor.converterModeloParaTabela(usuario); 
  		usuarioRepository.updatePasswordBySystem(usuarioTable);
  	}
  
  	@Transactional(readOnly = true, propagation=Propagation.NESTED)
  	//@PostFilter("hasPermission(filterObject, 'READ')")
  	public  List<Usuario> findUsuariosInativo(){
  		List<Usuario> retorno = new ArrayList<Usuario>();
  		for(UsuarioTable usuarioTable : usuarioRepository.findUsuariosInativo()){
  			retorno.add(find(UsuarioConversor.converterTabelaParaModelo(usuarioTable)));
  		}
  		 return retorno;
  	}
  
  
  
  	@Transactional(readOnly = true, propagation=Propagation.NESTED)
  	//@PostFilter("hasPermission(filterObject, 'READ')")
  	public List<Usuario> findByPerfil(Perfil perfil){
  		List<Usuario> retorno = new ArrayList<Usuario>();
  		for(UsuarioPerfilTable usuarioPerfilTable : usuarioPerfilRepository.findByPerfil(perfil.getId())){
  			retorno.add(find(usuarioPerfilTable.getUsuario()));
  		}
  		 return retorno;
  	}
  
  	@Transactional(readOnly = true, propagation=Propagation.NESTED)
  	//@PostFilter("hasPermission(filterObject, 'READ')")
  	public List<Usuario> findAll(){
  		List<Usuario> retorno = new ArrayList<Usuario>();
  		List<UsuarioTable> all = usuarioRepository.findAll();
  		for(UsuarioTable itemTable : all){
  			Usuario item = find(itemTable.getId());
  			 retorno.add(item);
  		}
  		 return retorno;
  	}
  
  	@Transactional(readOnly = true, propagation=Propagation.NESTED)
  	//@PostFilter("hasPermission(filterObject, 'READ')")
  	public List<Usuario> findForCombo(){
  		List<Usuario> retorno = new ArrayList<Usuario>();
  		List<UsuarioTable> all = usuarioRepository.findAll();
  		for(UsuarioTable itemTable : all){
  			Usuario item = UsuarioConversor.converterTabelaParaModelo(itemTable);
  			retorno.add(item);
  		}
  		return retorno;
  	}
  
  	@Transactional(readOnly = true, propagation=Propagation.NESTED)
  	public List<Usuario> findUsersByPerfil(Perfil perfil){
  		List<UsuarioTable> usuariosTable =  usuarioRepository.findUsersByPerfil(perfil.getId());
  		List<Usuario> retorno = new ArrayList<Usuario>();
  		for(UsuarioTable itemTable : usuariosTable){
  			 retorno.add(UsuarioConversor.converterTabelaParaModelo(itemTable));
  		}
  		 return retorno;
  	}
  
  	@Transactional(rollbackFor=Throwable.class, propagation=Propagation.NESTED)
  	//@PreAuthorize("hasPermission(#usuario, 'CREATE')")
  	public Usuario save(Usuario usuario){
  
  		if(usuario!=null ){
  			UsuarioTable usuarioTable  = UsuarioConversor.converterModeloParaTabela(usuario); 
  			usuarioRepository.save(usuarioTable);
  			usuario.setId(usuarioTable.getId());
  			for(Perfil perfil : usuario.getPerfis()){
  				UsuarioPerfilTable usuarioPerfilTable = new UsuarioPerfilTable();
  				usuarioPerfilTable.setPerfil(perfil.getId());
  				usuarioPerfilTable.setUsuario(usuario.getId());
  				usuarioPerfilRepository.save(usuarioPerfilTable);
  			}
  		}
  		return usuario;
  
  	}
  
  	@Transactional(rollbackFor=Throwable.class,propagation=Propagation.NESTED)
  	public List<Usuario> save( List<Usuario> colecao){
  		List<Usuario> retorno = new ArrayList<Usuario>();
  		for(Usuario item : colecao){
  			 retorno.add(save(item));
  		}
  		 return retorno;
  	}
  
  	@Transactional(rollbackFor=Throwable.class, propagation=Propagation.NESTED)
  	//@PreAuthorize("hasPermission(#usuario, 'WRITE')")
  	public void update(Usuario usuario){
  
  		//deletando antigos
  		usuarioPerfilRepository.deleteUsuario(usuario.getId());
  		UsuarioTable usuarioTable  = UsuarioConversor.converterModeloParaTabela(usuario); 
  		usuarioRepository.save(usuarioTable);
  		//inserindo novos
  		for(Perfil perfil : usuario.getPerfis()){
  			UsuarioPerfilTable usuarioPerfilTable = new UsuarioPerfilTable();
  			usuarioPerfilTable.setPerfil(perfil.getId());
  			usuarioPerfilTable.setUsuario(usuario.getId());
  			usuarioPerfilRepository.save(usuarioPerfilTable);
  		}
  
  	}
  
  	@Transactional(rollbackFor=Throwable.class, propagation=Propagation.NESTED)
  	//@PreAuthorize("hasPermission(#usuario, 'DELETE')")
  	public void delete(Usuario usuario){
  
  