[Spring] Acessando BD desnecessariamente

2 respostas
A

Pessoal, é normal o Spring ir no banco varias vezes antes da chamada e depois da chamado do meu método DAO?
Esta acontecendo o seguinte comigo, eu tenho a classe abaixo e cada vez que uso o objeto Pessoa ele vai e executa um select * from pessoa e um select max(id) from pessoa.

public class IniciaUsandoSpring { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath:config/applicationContext.xml"); PessoaDAO pessoaDao = (PessoaDAOImpl) ctx.getBean("pessoaDAOImpl"); Pessoa pessoa = new Pessoa(); pessoa.setEndereco("Rua Enderenco"); pessoa.setId(pessoaDao.lastId()); ********* pessoa.setNome("Alexandre Ferreira"); pessoaDao.savePessoa(pessoa); **********

Coloquei os ( ********** ) para destacar o uso do meu DAO.
Eu ligo o Debug e vejo que em cada linha que o Step Over do Debug passa ele executa o pessoaDao.lastId() e o pessoaDao.getPessoas(), perceba que esse getPessoas() não esta no codigo.
Resolvi comentar tudo quera pessoaDao, e o mesmo sempre faz uma nova consulta sempre que dou Step Over …
é normal?

2 Respostas

Mauricio_Linhares

Bem, o Spring não tem muito costume de acessar bancos de dados não, mas suponho que você esteja usando o Hibernate, cadê a configuração dessa classe e como está a implementação desse seu PessoaDaoImpl?

Outra coisa, porque você está fazendo cast pra PessoaDaoImpl? A idéia de usar interfaces não é exatamente evitar acessar as classes concretas diretamente não?

A
Estou usando Ibatis. Segue abaixo a PessoaDaoImpl:
public class PessoaDAOImpl extends SqlMapClientDaoSupport implements PessoaDAO {

	@SuppressWarnings("unchecked")
	public List<Pessoa> getPessoas() {
		logger.info(">> getPessoas");
		List<Pessoa> pessoas = null;
		try {
			pessoas = (List<Pessoa>)super.getSqlMapClientTemplate().queryForList("getPessoas");
		} catch (DataAccessException e) {
			e.printStackTrace();
		}
		logger.info("<< getPessoas");
		return pessoas;
	}

	public void savePessoa(Pessoa pessoa) {
		logger.info(">> savePessoa");
		try {
			super.getSqlMapClientTemplate().insert("savePessoa", pessoa);
		} catch (DataAccessException e) {
			e.printStackTrace();
		}
		logger.info("<< savePessoa");
	}

	public Integer lastId() {
		logger.info(">> lastId");
		Integer lastId = null;
		try {
			lastId = (Integer) super.getSqlMapClientTemplate().queryForObject("pessoaLastId");
		} catch (DataAccessException e) {
			e.printStackTrace();
		}
		if (lastId == null) {
			lastId = 1;
		} else {
			lastId++;
		}
		logger.info("<< lastId");
		return lastId;
	}
}

Sobre o cast, eu comi mosca mesmo...rs

Criado 20 de maio de 2007
Ultima resposta 21 de mai. de 2007
Respostas 2
Participantes 2