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?
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?
Estou usando Ibatis.
Segue abaixo a PessoaDaoImpl:
[code]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;
}
}
[/code]
Sobre o cast, eu comi mosca mesmo…rs