Minha primeira aplicacao usando hibernate

13 respostas
J

Oi pessoal, tudo bem? Eu tenho que aprender o basico em 2 semanas e o professor nao vai ensinar nada. Estou acompanhando alguns tutoriais da net e tambem a apostila 21 da Caelum mas ta dificil, soh estou me estressando entao gostaria de pedir a ajuda de vcs..

Importei todos os jars da pasta required do pacote hibernate-search-4.2.0.Final que baixei do site, baixei a parte um jar do javax.persistence e tambem o driver do MySQL...

Criei dois files:
hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect
hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost/test
hibernate.connection.username = root
hibernate.connection.password = 1234
hibernate.show_sql = true
hibernate.format_sql = true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=
	%d{HH:mm:ss} %5p [%c{1}] %m%n
log4j.rootLogger=warn, stdout
log4j.logger.org.hibernate=info
Criei duas classes:
package br.com.caelum.hibernate;

import javax.persistence.*;

@Entity
public class Produto {

	@Id
	@GeneratedValue
	private Long id;
	
	private String nome;
	private String descricao;
	
	private double preco;
}
package br.com.caelum.hibernate;

import org.hibernate.cfg.*;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class GeraTabelas {
	public static void main(String[] args){
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		cfg.addAnnotatedClass(Produto.class);
		
		SchemaExport se = new SchemaExport(cfg);
		se.create(true, true);
	}

}
(obs: o eclipse diz que o AnnotationConfiguration esta deprecado...nao entendo isso)

Dai quando clico com botao direito e vou em Run as Java Application aparece uma tela de "Searching for main types" e eu seleciono a classe GeraTabelas e o seguinte erro aparece:
"Exception in thread "main" java.lang.NoClassDefFoundError: javax/transaction/SystemException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2248)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2214)
at org.hibernate.cfg.Configuration.(Configuration.java:176)
at br.com.caelum.hibernate.GeraTabelas.main(GeraTabelas.java:8)
Caused by: java.lang.ClassNotFoundException: javax.transaction.SystemException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 6 more"

Agradeco desde ja pela ajuda!

13 Respostas

Hebert_Coelho

Olhando a mensagem de erro, ainda falta você adicionar biblioteca:

ClassNotFoundException: javax.transaction.SystemException

Hibernate search? Pra que isso? Pq você não pegou o hibernate normal mesmo?

javaflex

Procure exemplos de CRUD simples como este: http://danielniko.wordpress.com/2012/12/03/simple-crud-using-java-hibernate-and-mysql/ Este exemplo usa mapeamento por XML, mas fica a seu critério escolher o que achar melhor. No mais: https://www.google.com.br/search?q=CRUD+HIBERNATE+MYSQL

J

Eu nao entendo nada disso Hebert, na apostila falava pra entrar no site do hibernate e baixar a ultima versao, parece q essa era a ultima… eh soh baixar essa biblioteca javax.transaction ??

Vou dar uma lida nesses links Javaflex, obrigado

javaflex

jpedr0:
Eu nao entendo nada disso Hebert, na apostila falava pra entrar no site do hibernate e baixar a ultima versao, parece q essa era a ultima… eh soh baixar essa biblioteca javax.transaction ??

Vou dar uma lida nesses links Javaflex, obrigado


Sobre download, segue link: http://sourceforge.net/projects/hibernate/files/hibernate4/ E comece do zero e depois vai pegando o que você tinha feito e adaptando no projeto novo.

J

Pessoal, agora eu exclui tudo daquele pacote hibernate search e baixei o hibernate release 4.2 final. E ta aparecendo o comando sql que o hibernate esta executando, mas nada acontece no meu banco de dados, nenhuma tabela eh criada. Alguem sabe qual eh o problema??

Mar 24, 2013 2:07:17 PM org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
Mar 24, 2013 2:07:17 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.2.0.Final}
Mar 24, 2013 2:07:17 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000205: Loaded properties from resource hibernate.properties: {hibernate.connection.username=root, hibernate.connection.password=****, hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect, hibernate.show_sql=true, hibernate.connection.url=jdbc:mysql://localhost/test, hibernate.bytecode.use_reflection_optimizer=false, hibernate.connection.driver_class=com.mysql.jdbc.Driver, hibernate.format_sql=true}
Mar 24, 2013 2:07:17 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Mar 24, 2013 2:07:17 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLInnoDBDialect
Mar 24, 2013 2:07:18 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000227: Running hbm2ddl schema export
Mar 24, 2013 2:07:18 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)
Mar 24, 2013 2:07:18 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 20
Mar 24, 2013 2:07:18 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000006: Autocommit mode: false
Mar 24, 2013 2:07:18 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost/test]
Mar 24, 2013 2:07:18 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000046: Connection properties: {user=root, password=****}

    drop table if exists Produto

    create table Produto (
        id bigint not null auto_increment,
        descricao varchar(255),
        nome varchar(255),
        preco double precision not null,
        primary key (id)
    ) type=InnoDB
Mar 24, 2013 2:07:18 PM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: HHH000389: Unsuccessful: create table Produto (id bigint not null auto_increment, descricao varchar(255), nome varchar(255), preco double precision not null, primary key (id)) type=InnoDB
Mar 24, 2013 2:07:18 PM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=InnoDB' at line 7
Mar 24, 2013 2:07:18 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH000030: Cleaning up connection pool [jdbc:mysql://localhost/test]
Mar 24, 2013 2:07:18 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete
javaflex

Pela mensagem ao pé da letra parece que o script gerado não é compatível com a versão do seu servidor MySQL. Qual versão do dialeto você configurou para o Hibernate e qual versão do seu MySQL? Provavelmente não são as mesmas. E tem innodb no seu MySQL?

J

Obrigado pela observacao, nao sei o que eh cada coisa, mas apaguei o “InnoDB” do hibernate dialect e funcionou.

Uma coisa q eu to invocado agora eh que nao importa a ordem q eu declare as variaveis, o hibernate sempre cria o campo “Descricao” antes de “Nome”, acho q fica estranho nao tem como corrigir isso?

javaflex

jpedr0:
Obrigado pela observacao, nao sei o que eh cada coisa, mas apaguei o “InnoDB” do hibernate dialect e funcionou.

Uma coisa q eu to invocado agora eh que nao importa a ordem q eu declare as variaveis, o hibernate sempre cria o campo “Descricao” antes de “Nome”, acho q fica estranho nao tem como corrigir isso?


Essa parte não sei pois nunca trabalhei com criação automática direto no banco, onde trabalho quem modela tabelas é AD. Achei aqui o pessoal falando sobre isso: http://www.guj.com.br/java/57919-hibernate-script-sql

J

Pelo amor de Deus! mudando a minha duvida pq nao aguento mais, leio tantos topicos com esse problema e nenhum com solucao, ta foda.

Fica aparecendo esse erro quando tento compilar:
INFO: HHH000318: Could not find any META-INF/persistence.xml file in the classpath
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named factory
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
	at br.com.caelum.hibernate.TestaInsereConta.main(TestaInsereConta.java:8)
Alguem poderia montar um persistence.xml pra esse meu projeto pra eu ver como q faz?? Eu soh tenho essas duas classes e Sim, tem um persistence.xml dentro do META-INF dentro do src.....
package br.com.caelum.hibernate;

import javax.persistence.*;

@Entity
public class Produto {

	@Id
	@GeneratedValue
	private Long id;
	
	private String nome;
	private String descricao;
	
	private double preco;

	public Long getId() {
		return id;
	}

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

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public double getPreco() {
		return preco;
	}

	public void setPreco(double preco) {
		this.preco = preco;
	}
	
}
package br.com.caelum.hibernate;

import javax.persistence.*;

public class TestaInsereProduto {

	public static void main(String[] args) {
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("default");
		EntityManager entityManager = factory.createEntityManager();

	}

}
javaflex

Não sei se entendi direito, mas você tinha baixado o Hibernate, então pareceu ter usado o Hibernate puro e agora está usando com JPA?

De qualquer forma segue exemplo para ambos os casos: http://www.patternizando.com.br/2011/08/utilizar-persistence-xml-ou-hibernate-cfg-xml/

J

Blz, eu acho esses modelos de persistence.xml mas quais partes eu deveria mudar pra funcionar para o meu projeto??

javaflex

Você já não tinha conseguido conectar antes com sucesso? Até a tabela tinha sido criada, mesmo que com campos fora de ordem. Então a configuração já estava certa depois que tirou o InnoDb. O que alterou depois que fez dar errado? Volte ao ponto que estava dando certo e vai dando pequenos passos e testando pra ver se continua certo, quando der errado vai ser num ponto específico, assim você consegue identificar pontualmente o problema.

Hebert_Coelho

Na minha assinatura tem duas aplicações que funcionam e tem o código fonte para download.

Elas usam o JPA + Hibernate.

No meu blog, também tem um tutorial de hibernate que eu sei que funciona. [=

Criado 24 de março de 2013
Ultima resposta 25 de mar. de 2013
Respostas 13
Participantes 3