Minha primeira aplicacao usando hibernate

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:

[code]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;

}[/code]

[code]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);
}

}[/code](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!

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?

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

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

[quote=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[/quote]
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.

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??

[code]Mar 24, 2013 2:07:17 PM org.hibernate.annotations.common.Version
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
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
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[/code]

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?

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?

[quote=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?[/quote]
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

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…

[code]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;
}

}[/code]

[code]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();

}

}[/code]

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/

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

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.

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. [=