Interface recebe instância de DAO[RESOLVIDO]

4 respostas
R

Tenho uma interface que se chama

UsuarioDAO

public interface UsuarioDAO {

	public void salvar(Usuario usuario);
	public void atualizar(Usuario usuario);
	public void excluir(Usuario usuario);
	public Usuario carregar(Integer codigo);
	public Usuario buscarPorLogin(String login);
	public List<Usuario> listar();
	
}

agora tenho uma classe

UsuarioDAOHibernate

public class UsuarioDAOHibernate implements UsuarioDAO {

	private Session session;

	public void setSession(Session session) {
		this.session = session;
	}

	@Override
	public void salvar(Usuario usuario) {
		
		this.session.save(usuario);

	}

	@Override
	public void atualizar(Usuario usuario) {
		
		this.session.update(usuario);

	}

	@Override
	public void excluir(Usuario usuario) {
		
		this.session.delete(usuario);

	}

	@Override
	public Usuario carregar(Integer codigo) {

		return (Usuario) this.session.get(Usuario.class, codigo);
	}

	@Override
	public Usuario buscarPorLogin(String login) {
	
		String hql = "select u from Usuario u where u.login = :login";
		
		Query consulta = this.session.createQuery(hql);
		
		consulta.setString("login", login);
		
		return (Usuario) consulta.uniqueResult();
		
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> listar() {
		
		return this.session.createCriteria(Usuario.class).list();
		
	}

}

a duvida é nessa linha de comando

UsuarioDAOHibernate usuarioDAO = new UsuarioDAOHibernate();

UsuarioDAO novo;
		
		novo = usuarioDAO.setSession(HibernateUtil.getSessionFactory().getCurrentSession());

alguem pode me esplicar oq ocorre aqui? pq é assim? no livro que estou lendo eles não explicam somente é assim.
Obrigado

4 Respostas

dxos

view plaincopy to clipboardprint?
UsuarioDAOHibernate usuarioDAO = new UsuarioDAOHibernate();

UsuarioDAO novo;

novo = usuarioDAO.setSession(HibernateUtil.getSessionFactory().getCurrentSession());

esta compilando seu codigo amigo ?

pois seu metodo setSession é void, não vai compilar essa linha não…

na minha opinião deveria ser ± assim:

// instanciar seu Dao
UsuarioDAO usuarioDAO = new UsuarioDAOHinernate(HibernateUtil.getSessionFactory().getCurrentSession());

e o seu UsuarioDAOHibernate

public class UsuarioDAOHibernate implements UsuarioDAO {  
  
    private Session session;  

// colocaria esse construtor aqui
    public UsuarioDAOHibernate(Session session){
         this.session = session;
   }
  
// não teria esse metodo
    public void setSession(Session session) {  
        this.session = session;  
    }  
...

onde você passaria a sessão do hibernate que quer usar logo na contrução no objeto e não precisaria settar ele depois de criado, até porque se é um atriburo essencial para a sua classe Dao.

R

dxos:
view plaincopy to clipboardprint?
UsuarioDAOHibernate usuarioDAO = new UsuarioDAOHibernate();

UsuarioDAO novo;

novo = usuarioDAO.setSession(HibernateUtil.getSessionFactory().getCurrentSession());

esta compilando seu codigo amigo ?

pois seu metodo setSession é void, não vai compilar essa linha não…

na minha opinião deveria ser ± assim:

// instanciar seu Dao
UsuarioDAO usuarioDAO = new UsuarioDAOHinernate(HibernateUtil.getSessionFactory().getCurrentSession());

e o seu UsuarioDAOHibernate

public class UsuarioDAOHibernate implements UsuarioDAO {  
  
    private Session session;  

// colocaria esse construtor aqui
    public UsuarioDAOHibernate(Session session){
         this.session = session;
   }
  
// não teria esse metodo
    public void setSession(Session session) {  
        this.session = session;  
    }  
...

onde você passaria a sessão do hibernate que quer usar logo na contrução no objeto e não precisaria settar ele depois de criado, até porque se é um atriburo essencial para a sua classe Dao.

ok, mas…
minha duvida maior esta aqui

// instanciar seu Dao
UsuarioDAO usuarioDAO = new UsuarioDAOHinernate(HibernateUtil.getSessionFactory().getCurrentSession());

aqui você Instância um UsuarioDAOHibernate no UsuarioDAO(interface)

pq isso?

uma duvida tola, mas e que sou iniciante…
Obrigado…

dxos

A explicação da utilização de interfaces é bem longa por isso vai um artigo aqui do próprio GUJ sobre o assunto.

http://www.guj.com.br/articles/123

é esse seu problema ?

R

vlw ajudou sim :smiley:

Criado 11 de janeiro de 2013
Ultima resposta 12 de jan. de 2013
Respostas 4
Participantes 2