Dúvidas com Struts 2 e hibernate

10 respostas
M

Pessoal, boa noite,
estou fazendo o curso de formação java e como nao tenho experiencias com linguagem de programacao e estou iniciando no java, peço a ajuda de todos.
estou tentando utilizar o hibernate para melhorar o codigo DAO do meu projeto, só que estou com uma dúvida, eu ja tinha o Struts2, com as actions funcionando normalmente, e o DAO também, só que agora estou utilizando o hibernate, o DAO ficou bem menor, eu testei com uma classe com o main e cadastra no banco normalmente, porem no projeto web, como eu faria na action pra utilizar o metodo salva do ContatoDAO com hibernate?
vou colar a classe DAO e o action.

ContatoDAO

package br.com.mensalidade.hibernate.DAO;

import java.util.List;

import org.hibernate.Session;

import br.com.mensalidade.Classes.Contato;

public class ContatoDAO {
	private Session session;
	
	public ContatoDAO(Session session){
		this.session = session;
	}
	
	public void salva(Contato c) {
		this.session.save(c);
	}
	
	public void remove(Contato c) {
		this.session.delete(c);
	}
	
	public Contato procura(Long id) {
		return (Contato) this.session.load(Contato.class, id);
	}
	
	public void atualiza(Contato c) {
		this.session.update(c);
	}
	
	public List<Contato> listaTudo() {
		return this.session.createCriteria(Contato.class).list();
	}
	

}

agora o Action do Struts2

import org.hibernate.Session;

import br.com.mensalidade.Classes.Contato;
import br.com.mensalidade.hibernate.HibernateUtil;
import br.com.mensalidade.hibernate.DAO.ContatoDAO;

public class AdicionaContatoAction {
	
	private Contato contato;
	
	
	@Action(value="CadastraContato", results = {
			@Result(name="ok", location="/tarefa-adicionada.jsp")
	})
	
	public String execute() {
		Session session = new HibernateUtil().getSession();
		new ContatoDAO(session);
		ContatoDAO.salva(contato);
		return "ok";
	}

	public Contato getContato() {
		return this.contato;
	}

	public void setContato(Contato contato) {
		this.contato = contato;
	}

	

	

}

como eu invocaria o metodo salva do hibernate?

SDS

Leandro Mouzer

10 Respostas

M

Alguem pessoal? fiz a pergunta correta ou usei termos errados?

SDS

partenon

Nao entendi… Sua Action chama “salva” em seu DAO, que por sua vez chama “session.save”. Ou seja, ele ja esta chamando o Hibernate…

M

isso é o que eu estou tentando fazer, antes era assim:
jsp / struts2 / DAO / mysql quando eu clicava no botao adicionar, ele chamava a action gravaContatos que estava configurada para chamar o metodo ContatoDAO.salva. so que agora eu estou estudando o hibernate, e com o hibernate eu nao preciso de um dao pra acessar o banco porque ele ja coloca os comandos sql automaticamente certo? so tenho que ter o dao do hibernate, so que agora eu nao sei como chamar esse dao para ele salvar os dados no banco.

SDS

partenon

Eu ainda nao sei se entendi…

Voce tinha isso:
JSP => Struts => DAO Antigo => MySQL

Agora vc tem isso:
JSP => Struts => DAO Novo => Hibernate => MySQL

O Hibernate nao tem um “DAO” por assim dizer. Quando vc chama “save” passando sua entidade, ele salva automaticamente no banco de dados. Se ele nao esta salvando com o codigo que vc mostrou, vc precisa dar mais detalhes sobre como vc configurou o Hibernate. Por exemplo, voce fez um arquivo hbm.xml ou voce colocou anotacoes na classe Contato?

M

Vou tentar explicar aqui…
no curso fj-21 estava ensinando struts 2 jsp… nos tinhamos que inserir dados no banco de dados mysql…
entao tinha o formulario jsp quando clicava em adicionar, acionava a Action adiciona contatos, no struts 2 tinha o contatoDAO onde tinha a string sql insert into banco bla bla bla, no hibernate nao tem mais isso, entao tem o contatoDAO da seguinte forma:

public class ContatoDAO {
	private Session session;
	
	public ContatoDAO(Session session){
		this.session = session;
	}
	
	public void salva(Contato c) {
		this.session.save(c);
	}
	
	public void remove(Contato c) {
		this.session.delete(c);
	}
	
	public Contato procura(Long id) {
		return (Contato) this.session.load(Contato.class, id);
	}
	
	public void atualiza(Contato c) {
		this.session.update(c);
	}
	
	public List<Contato> listaTudo() {
		return this.session.createCriteria(Contato.class).list();
	}
	

}

e na Action eu tentei chamar o metodo salva que esta configurado acima, mas nao sei como chama-lo, quando eu faco ContatoDAO.salva(contato) da erro… nao sei oq tem de errado…
vou colar novamente a Action do struts 2

public class AdicionaContatoAction {
	
	private Contato contato;
	
	
	@Action(value="CadastraContato", results = {
			@Result(name="ok", location="/tarefa-adicionada.jsp")
	})
	
	public String execute() {
		ContatoDAO dao = new ContatoDAO(null);
		dao.salva(contato);
		return "ok";
	}

	public Contato getContato() {
		return this.contato;
	}

	public void setContato(Contato contato) {
		this.contato = contato;
	}

}

eu nao usei nenhum arquivo, eu configurei o arquivo hibernate.properties e na classe Contato eu coloquei:

@Entity
public class Contato {
	@Id
	@GeneratedValue
	private Long id;
	private Long matricula;
	private String digina;
	private String nome;
	private String sobrenome;
	private String rg;
	private String cpf;
	private String titulo;
	private String orgaoexp;
	private String telefone;
	private String celular;
	private String email;
//getters and setters

e o arquivo de configuracao do hibernate:

hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect
hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost/bdmensalidade
hibernate.connection.username = root
hibernate.connection.password = 

hibernate.show_sql = true
hibernate.format_sql = true

a duvida é, como eu chamo o metodo salva do hibernate na action do struts 2??
quando eu clicar no adicionar do formulario ira chamar a action CadastraContatos nela tera o metodo salva do hibernate, porem nao consigo.

aguardo dicas

SDS

M

eu estava lendo… e vi um topico que me gerou uma duvida, precisa de um plugin para o hibernate funcionar com o struts 2??

partenon

Voce esta chamando corretamente. Qual o erro que voce esta recebendo?

M

para nao dar erro de compilação no eclipse eu coloquei assim:

@Action(value="CadastraContato", results = {
			@Result(name="ok", location="/tarefa-adicionada.jsp")
	})
	
	public String execute() {
		Session session = new HibernateUtil().getSession();
		new ContatoDAO(session).salva(contato);
		return "ok";
	}

vou no formulario jsp digito os dados pra adicionar, clico no botao adicionar e da o seguinte erro:

SEVERE: Servlet.service() for servlet default threw exception
java.lang.ClassNotFoundException: org.hibernate.Session
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at java.lang.Class.getDeclaredFields0(Native Method)
	at java.lang.Class.privateGetDeclaredFields(Unknown Source)
	at java.lang.Class.getDeclaredFields(Unknown Source)
partenon
java.lang.ClassNotFoundException: org.hibernate.Session

Este eh o erro que vc precisa corrigir :slight_smile: Significa que o Hibernate (hibernate3.jar) nao esta na classpath (deveria estar em WEB-INF/lib, provavelmente). Nao se esqueca de colocar tambem as dependencias do Hibernate.

M

Tem este arquivo no projeto, porem esta na pasta lib de acordo com a apostila do curso fj-21.

Criado 29 de junho de 2010
Ultima resposta 30 de jun. de 2010
Respostas 10
Participantes 2