Exercicio 3.8 da apostila WEB2 da caelum(HIBERNATE)-URGENTE

9 respostas
A

ae pessoal eu estou cm um grande problema… nesse exercicio nao consigo passar dele… pois quando vou rodar a classe que ele manda fazer eu tenho um erro assimm:

java.sql.SQLException: No value specified for parameter 3

como pude perceber… ele na hora de inserir os dados na tabela ele cria o sql assim:

insert into Usuario (login, senha, id) values (?, ?, ?)

e o certo seria assim

insert into Usuario (id, login, senha) values (?, ?, ?)

pq ele cria assim??? seria esse o problema??? como eu posso resolver??

ps: estou usando annotations!

9 Respostas

A

ngm pode me ajudar???

alberto_ribeiro

posta o códig aqui…

A
minha VO
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;


@Entity
public class Usuario {
	
	@Id
	@GeneratedValue
	private Long id;

	private String login;

	private String senha;
//+get e set
}
e minha classe de persistencia
public class TestaUsuario {
public static void main(String[] args) {
// configura o hibernate
Configuration conf = new AnnotationConfiguration();
conf.configure();
SessionFactory factory = conf.buildSessionFactory();
Session session = factory.openSession();
// cria um usuario
Usuario u = new Usuario();
u.setLogin("admin");
u.setSenha("admin");
// abre transacao e insere
Transaction t = session.beginTransaction();
session.save(u);
t.commit();
session.close();
}
}
alberto_ribeiro

então olhando a apostila da caelum seu código está igual, como está sua tabela vc gerou um id auto_increment lá ?

Eduardo_Bregaida

To te mandando um exemplo:

Classe acesso

@Entity
public class Acesso {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	int id;

	private String login;

	private String senha;

	private boolean administrador;

	public boolean isAdministrador() {
		return administrador;
	}

	public void setAdministrador(boolean administrador) {
		this.administrador = administrador;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String logar() {
		Session session = HibernateUtil.openSession();
		AcessoDAO acessoDAO = new AcessoDAO(session);
		return acessoDAO.verificaAutenticacao(this);
	}

	public void salvar() {
		Session session = HibernateUtil.openSession();
		AcessoDAO acessoDAO = new AcessoDAO(session);
		acessoDAO.salvaUsuario(this);
	}

	public void deletar() {
		Session session = HibernateUtil.openSession();
		AcessoDAO acessoDAO = new AcessoDAO(session);
		acessoDAO.excluiUsuario(this);
	}


}

classe AcessoDAO

public class AcessoDAO {

	private Session session;

	private Logger logger = Logger.getLogger(Acesso.class);

	public AcessoDAO(Session session) {
		logger.info("Construtor" + session);
		this.session = session;

	}

	/**
	 * @verifica se o usuário está autorizado para logar no sistema
	 */
	@SuppressWarnings("unchecked")
	public String verificaAutenticacao(Acesso acesso) {
		logger.info("HQL" + acesso.getLogin());

		Query query = session
				.createQuery("select acesso from Acesso as acesso where acesso.login = :login and acesso.senha = :senha");
		query.setParameter("senha", acesso.getSenha());
		query.setParameter("login", acesso.getLogin());

		Acesso acesso2 = (Acesso) query.uniqueResult();

		if (acesso2 == null) {
			return "erro";
		} else {
			if (acesso2.isAdministrador()){
				return "administrador";
			}else
				return "usuario";
		}

	}

	/**
	 * @verifica salva um novo usuário no sistema
	 */
	public void salvaUsuario(Acesso acesso) {
		session.saveOrUpdate(acesso);
	}

	/**
	 * @verifica exclui um usuário no sistema
	 */
	public void excluiUsuario(Acesso acesso) {
		session.delete(acesso);
	}


	@SuppressWarnings("unchecked")

	public Acesso selecionaUsuario(Acesso acesso) {
		// TODO Auto-generated method stub
		return (Acesso) session.load(Acesso.class, acesso.getLogin());
	}



}
Classes de configurações do Hibernate
GERABANCO

public class GeraBanco {
	public static void main(String[] args) {
		Configuration configuration = new AnnotationConfiguration();
		configuration.configure();
		SchemaExport schemaExport = new SchemaExport(configuration);
		schemaExport.create(true, true);
	}

}
InsereDados.java


public class InsereDados {
	public static void main(String[] args) {
		Configuration configuration = new AnnotationConfiguration();
		configuration.configure();
		SchemaExport schemaExport = new SchemaExport(configuration);
		schemaExport.create(true, true);

		// Fabrica de Sessão
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();

		Transaction transaction = session.beginTransaction();

		Acesso acesso = new Acesso();// ainda é transient
		acesso.setLogin("Eduardo");
		acesso.setSenha("123");
		acesso.setAdministrador(false);
		session.saveOrUpdate(acesso);

		Dados dados = new Dados();
		dados.setCidadeDestino("SP");
		dados.setCidadeOrigem("SP");
		dados.setClienteDestino("Edu");

		session.saveOrUpdate(dados);

		transaction.commit();
		session.close();
		sessionFactory.close();
	}
}
HibernateUtil.java
public class HibernateUtil {
	private static ThreadLocal<Session> sessions;

	private static SessionFactory sessionFactory;
	static {
		sessionFactory = new AnnotationConfiguration().configure()
				.buildSessionFactory();
		sessions= new ThreadLocal<Session>();
	}

	public static Session openSession() {
		return sessionFactory.openSession();
	}

	public static Session getCurrentSession() {
		if (sessions.get() == null) {
			sessions.set(openSession());
		}
		return sessions.get();
	}

	public static void closeCurrentSession() {
		getCurrentSession().close();
		sessions.set(null);
	}
}
HibernateSessionFilter.java

public class HibernateSessionFilter implements Filter {
	public void doFilter(ServletRequest servletRequest,
			ServletResponse servletResponse, FilterChain filterChain) throws ServletException {
		try {
			HibernateUtil.getCurrentSession().beginTransaction();//é obrigado estar
			filterChain.doFilter(servletRequest, servletResponse);
			HibernateUtil.getCurrentSession().getTransaction().commit();
		} catch (Exception e) {
			HibernateUtil.getCurrentSession().getTransaction().rollback();
			throw new ServletException(e);
		} finally {
			HibernateUtil.closeCurrentSession();
		}

	}

	public void destroy() {
		// TODO Auto-generated method stub

	}

	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}
}
E o Hibernate Config.xml

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		<property name="hibernate.dialect">
			org.hibernate.dialect.MySQLDialect
		</property>
		<property name="hibernate.connection.url">
			jdbc:mysql://localhost/projetojsfgrecco
		</property>
		<property name="hibernate.connection.driver_class">
			com.mysql.jdbc.Driver
		</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>

		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>

		<!-- usar C3P0 Pool de conexões-->
		<property name="hibernate.c3p0.min_size">1</property>
		<property name="hibernate.c3p0.max_size">10</property>
		<property name="hibernate.c3p0.maxIdleTime">200</property>
		<property name="hibernate.c3p0.timeout">180</property>
		<property name="hibernate.c3p0.idle_test_period">100</property>
		<property name="hibernate.c3p0.max-statements">50</property>

		<!-- Cache 2 nível-->
		<property name="hibernate.cache.provider_class">
		org.hibernate.cache.EhCacheProvider</property>



		<mapping class="br.com.grecco.acesso.Acesso"/>
		<mapping class="br.com.grecco.dados.Dados"/>

	</session-factory>
</hibernate-configuration>

Qq coisa posta aí sua dúvida, eu montei esse login baseado no curso do FJ26 da Caelum que foi excelente.

:D

A

cara eu estou com esse problema.. e estou fzendo igual a apostila da caelum manda vou mandar todas minhas classes!!! se voce souber onde esta errado!!! :

package br.com.caelum.lojavirtual.dao;

import java.util.List;

import org.hibernate.Session;

import br.com.caelum.lojavirtual.modelo.Usuario;

public class UsuarioDao {
	private Session session;

	public UsuarioDao(Session session) {
		this.session = session;
	}

	public void adiciona(Usuario u) {
		this.session.saveOrUpdate(u);
	}

	public void remove(Usuario u) {
		this.session.delete(u);
	}

	public void atualiza(Usuario u) {
		this.session.merge(u);
	}

	public List<Usuario> listaTudo() {
		return this.session.createCriteria(Usuario.class).list();
	}

	public Usuario procura(Long id) {
		return (Usuario) session.load(Usuario.class, id);
	}
}
package br.com.caelum.lojavirtual.main;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

import br.com.caelum.lojavirtual.dao.UsuarioDao;
import br.com.caelum.lojavirtual.modelo.Usuario;

public class TestaUsuario {
	public static void main(String[] args) {
		// configura o hibernate
		Configuration conf = new AnnotationConfiguration();
		conf.configure();
		SessionFactory factory = conf.buildSessionFactory();
		Session session = factory.openSession();
		// cria um usuario
		Usuario u = new Usuario();
		u.setLogin("admin");
		u.setSenha("admin");
		// cria dao
		UsuarioDao dao = new UsuarioDao(session);
		// abre transacao e insere
		Transaction t = session.beginTransaction();
		dao.adiciona(u);
		t.commit();
		
		// lista usuarios
		List<Usuario> lista = dao.listaTudo();
		for (Usuario usuario : lista) {
			System.out.println(usuario.getLogin());
		}
		session.close();
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">123456</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost/lojavirtual</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>
		
		
		<mapping class="br.com.caelum.lojavirtual.modelo.Usuario"/>
	</session-factory>
	
	
</hibernate-configuration>
Eduardo_Bregaida
[quote=arthurnn]minha VO
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;


@Entity
public class Usuario {
	
	@Id
	@GeneratedValue
	private Long id;

	private String login;

	private String senha;
//+get e set
}

Tenta botar isso em cima do id @GeneratedValue(strategy = GenerationType.IDENTITY)

A

cara vlw pela ajuda… eu consegi resolver o problema… era problema d biblioteca… eu estava imporatando os jar’s do hibernate 3.2.4 e soh funciona com os do 3.2.2!!! consegi…vlww por tudu… .flw…

plentz

Tem certeza que o problema era entre 3.2.2 e 3.2.4?!

Criado 16 de maio de 2007
Ultima resposta 17 de mai. de 2007
Respostas 9
Participantes 4