Problema com hibernate

10 respostas
A

Ola pesoal, segui um video do hibernate que mostrava como fazer uma classe que mapeava o BD.
sendo que na execução da esse erro:

Set 13, 2013 2:56:55 AM org.hibernate.annotations.common.Version 

INFO: HCANN000001: Hibernate Commons Annotations {4.0.2.Final}

Set 13, 2013 2:56:56 AM org.hibernate.Version logVersion

INFO: HHH000412: Hibernate Core {4.2.2.Final}

Set 13, 2013 2:56:56 AM org.hibernate.cfg.Environment 

INFO: HHH000206: hibernate.properties not found

Set 13, 2013 2:56:56 AM org.hibernate.cfg.Environment buildBytecodeProvider

INFO: HHH000021: Bytecode provider name : javassist

Set 13, 2013 2:56:57 AM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)

Set 13, 2013 2:56:57 AM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

INFO: HHH000115: Hibernate connection pool size: 20

Set 13, 2013 2:56:57 AM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

INFO: HHH000006: Autocommit mode: true

Set 13, 2013 2:56:57 AM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost/loja]

Set 13, 2013 2:56:57 AM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

INFO: HHH000046: Connection properties: {user=root, password=****, autocommit=true, release_mode=auto}

Set 13, 2013 2:56:59 AM org.hibernate.dialect.Dialect 

INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect

Set 13, 2013 2:56:59 AM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService

INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory

Set 13, 2013 2:56:59 AM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory 

INFO: HHH000397: Using ASTQueryTranslatorFactory

Set 13, 2013 2:56:59 AM org.hibernate.search.Version 

INFO: HSEARCH000034: Hibernate Search 4.3.0.Final

Set 13, 2013 2:56:59 AM org.hibernate.search.impl.ConfigContext getLuceneMatchVersion

WARN: HSEARCH000075: Configuration setting hibernate.search.lucene_version was not specified, using LUCENE_CURRENT.

Set 13, 2013 2:57:00 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute

INFO: HHH000228: Running hbm2ddl schema update

Set 13, 2013 2:57:00 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute

INFO: HHH000102: Fetching database metadata

Set 13, 2013 2:57:00 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute

INFO: HHH000396: Updating schema

Set 13, 2013 2:57:00 AM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata

INFO: HHH000262: Table not found: Clientes

Set 13, 2013 2:57:00 AM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata

INFO: HHH000262: Table not found: Clientes

Set 13, 2013 2:57:00 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute

ERROR: HHH000388: Unsuccessful: create table Clientes (nome varchar(255) not null auto_increment, idade integer, primary key (nome)) ENGINE=InnoDB

Set 13, 2013 2:57:00 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute

ERROR: Incorrect column specifier for column nome

Set 13, 2013 2:57:00 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute

INFO: HHH000232: Schema update complete

Estou desconfiando dos .jar, eu coloquei todos os .jar que veio , indo em biblioteca, e criando…
Alguem me ajuda?

10 Respostas

drsmachado

É apenas este trecho de mensagem de erro que aparece? Por que eu desconfio que existe mais…

Rodrigo_Sasaki

“adam_sandler”:
ERROR: HHH000388: Unsuccessful: create table Clientes (nome varchar(255) not null auto_increment, idade integer, primary key (nome)) ENGINE=InnoDB
Set 13, 2013 2:57:00 AM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: Incorrect column specifier for column ‘nome’

Você criou um varchar auto_increment? Tem certeza que isso está certo?

PS: Seu filme “Gente Grande 2”, ficou muito ruim :slight_smile:

A

O erro é esse, e eu não criei nenhum var char.

Veja as classes.
CLIENTE

package br.com.entidades;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="Clientes")
public class Clientes {
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	
	@Column
	private String nome;
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public int getIdade() {
		return idade;
	}
	public void setIdade(int i) {
		this.idade = i;
	}
	@Column
	private int idade;

}

Repositorio Cliente

package br.com.repositorio;

import javax.persistence.Query;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import java.util.List;
import br.com.entidades.Clientes;

public class RepositorioCliente {
	EntityManagerFactory emf;
	EntityManager em;
	
	public RepositorioCliente()
	{
		emf = Persistence.createEntityManagerFactory("conexao");
		em =  emf.createEntityManager();
	}
	
	public void salvar(Clientes cliente){
		em.getTransaction().begin();
		em.merge(cliente);
		em.getTransaction().commit();
		em.close();
		
	}
	public void delete(Clientes c)
	{
		em.getTransaction().begin();
		em.remove(c);
		em.getTransaction().commit();
		em.close();
	}

	public List<Clientes> listarDados()
	{
		em.getTransaction().begin();
		Query consulta = em.createQuery("select cliente from Clientes cliente");	
		List<Clientes>cliente = consulta.getResultList();
		em.getTransaction().commit();
		em.close();
		return cliente;
	}
}

E a classe MAIN

package br.com.teste;

import br.com.entidades.Clientes;
import br.com.repositorio.RepositorioCliente;

public class Teste {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		RepositorioCliente repositorioCliente = new RepositorioCliente();
		Clientes cliente = new Clientes();
		cliente.setNome("Como se fosse a 1 vez");
		cliente.setIdade(20);
		
	//	repositorioCliente.salvar(cliente);
		
		

	}

}
drsmachado
@Id  
    @GeneratedValue(strategy=GenerationType.IDENTITY)  
      
    @Column  
    private String nome;

As anotações são válidas, sequencialmente, para o próximo atributo/getter mapeado.
No caso, como você não especificou que havia um atributo que responderia como Id, o hibernate assumiu que seria o nome e, como está indicado que o generated value é identity, ele vai dizer que o nome, do tipo varchar, está sendo autoincrementado.
Reveja o exemplo que está seguindo e verifique o que há antes de @Column do atributo nome.

A
drsmachado:
@Id  
    @GeneratedValue(strategy=GenerationType.IDENTITY)  
      
    @Column  
    private String nome;
As anotações são válidas, sequencialmente, para o próximo atributo/getter mapeado. No caso, como você não especificou que havia um atributo que responderia como Id, o hibernate assumiu que seria o nome e, como está indicado que o generated value é identity, ele vai dizer que o nome, do tipo varchar, está sendo autoincrementado. Reveja o exemplo que está seguindo e verifique o que há antes de @Column do atributo nome.

Criei um atributo id, mas continua dando erro:

Set 13, 2013 1:55:47 PM org.hibernate.annotations.common.Version
INFO: HCANN000001: Hibernate Commons Annotations {4.0.2.Final}
Set 13, 2013 1:55:47 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.2.2.Final}
Set 13, 2013 1:55:47 PM org.hibernate.cfg.Environment
INFO: HHH000206: hibernate.properties not found
Set 13, 2013 1:55:47 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Set 13, 2013 1:55:48 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)
Set 13, 2013 1:55:48 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 20
Set 13, 2013 1:55:48 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000006: Autocommit mode: true
Set 13, 2013 1:55:48 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost/loja]
Set 13, 2013 1:55:48 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000046: Connection properties: {user=root, password=****, autocommit=true, release_mode=auto}
Set 13, 2013 1:55:48 PM org.hibernate.dialect.Dialect
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
Set 13, 2013 1:55:48 PM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory
Set 13, 2013 1:55:48 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory
INFO: HHH000397: Using ASTQueryTranslatorFactory
Set 13, 2013 1:55:48 PM org.hibernate.search.Version
INFO: HSEARCH000034: Hibernate Search 4.3.0.Final
Set 13, 2013 1:55:48 PM org.hibernate.search.impl.ConfigContext getLuceneMatchVersion
WARN: HSEARCH000075: Configuration setting hibernate.search.lucene_version was not specified, using LUCENE_CURRENT.
Set 13, 2013 1:55:49 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000228: Running hbm2ddl schema update
Set 13, 2013 1:55:49 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000102: Fetching database metadata
Set 13, 2013 1:55:49 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000396: Updating schema
Set 13, 2013 1:55:49 PM org.hibernate.tool.hbm2ddl.TableMetadata
INFO: HHH000261: Table found: loja.clientes
Set 13, 2013 1:55:49 PM org.hibernate.tool.hbm2ddl.TableMetadata
INFO: HHH000037: Columns: [id, idade, nome]
Set 13, 2013 1:55:49 PM org.hibernate.tool.hbm2ddl.TableMetadata
INFO: HHH000108: Foreign keys: []
Set 13, 2013 1:55:49 PM org.hibernate.tool.hbm2ddl.TableMetadata
INFO: HHH000126: Indexes: [primary]
Set 13, 2013 1:55:49 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete

drsmachado

Se você leu corretamente o que postou, verá que não existe nenhum erro. A saída padrão do hibernate é na cor vermelha, portanto, você precisa procurar pela palavra “ERROR”.

A

Realmente funcionou agora, estou meio perdido ainda.
Ainda não consegui entender direito a relação jpa x hibernate…
Eu estou ultilizando o que?
hibernate puro?
pode alguem me dizer isso? de qualquer forma valeu a todos

drsmachado

JPA é o padrão especificado para o Java. Ele utiliza

EntityManagerFactory emf;  
    EntityManager em;

Atualmente, a versão do JPA é a 2.0. Ela surgiu para padronizar o que era provido pelos frameworks ORM em geral, incluindo o hibernate, que se tornou um provider.
O hibernate é um framework ORM que permite uso de suas próprias APIs e de JPA.
Caso estivesse usando hibernate puro, não precisaria de um persistence.xml e estaria usando Session ao invés de EntityManager.

A

Entendi vlw a todos!

drsmachado

O hibernate foi um dos primeiros frameworks ORM. Apenas depois da sua existência é que se desenvolveu a especificação que define as normas que padronizam o uso destes frameworks. Esta especificação foi chamada Java Persistence API (JPA) e não está diretamente ligada ao Java DataBase Connector (JDBC), embora seja provável que a forma de conexão entre java e o sgbd seja esta.
Diferente do JPA, que usa um gerenciador de entidades, o Hibernate baseia sua estrutura em sessões (org.hibernate.Session). Ambos dependem de uma transação (javax.persistence.Transaction no caso do JPA e org.hibernate.Transaction para o Hibernate) que, efetivamente, permite realizar a confirmação de uma instrução executada no banco de dados (commit) ou o retorno ao estado em que as tabelas se encontravam quando a sessão foi iniciada (rollback).
A forma de configuração de uma aplicação usando JPA é diferente da forma de configuração de uma aplicação que use Hibernate “puro”, mesmo que o provedor seja o Hibernate. O JPA utiliza o arquivo persistence.xml e depende da configuração do persistence-unit. Já o hibernate precisa de um arquivo xml, normalmente nomeado como hibernate.cfg.xml ou de um arquivo de propriedades com nome hibernate.properties ou configuração programática (feita diretamente em uma classe, usando mapa para determinar os valores dos atributos).
O mapeamento das entidades é diferente, também. O hibernate permite o uso de arquivos xml, denominados <NOME_ARQUIVO>.hbm.xml, onde NOME_ARQUIVO é normalmente o mesmo que o nome da classe que representa aquela entidade.
Há a segunda maneira de mapear entidades, maneira esta que também é utilizada no JPA: anotações.
Mais informações podem ser obtidas na documentação oficial do Hibernate.
Um framework equivalente é o EclipseLink, porém, este permite apenas a API do JPA.

Criado 13 de setembro de 2013
Ultima resposta 13 de set. de 2013
Respostas 10
Participantes 3