Problema ao tentar gerar tabela a partir de entity com JPA

Boa tarde, galera.

Estou começando a estudar JPA com uma apostila da K19, mas estou tendo problemas logo no primeiro exercício.

Não estou conseguindo gerar uma tabela a partir da Entity.

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns = "http://java.sun.com/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
 	version="1.0">

	<persistence-unit name="livraria" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>com.livraria.entidades.Editora</class>
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
			<property name="hibernate.hbm2dll.auto" value="create"/>
			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
			<property name="javax.persistence.jdbc.user" value="root"/>
			<property name="javax.persistence.jdbc.password" value="root"/>
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/livraria"/>
			<property name="hibernate.show_sql" value="true"/>  
            <property name="hibernate.format_sql" value="true"/> 
		</properties>
	</persistence-unit>
	
</persistence>

Entity:

package com.livraria.entidades;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity(name="editora")
public class Editora {
	@Id
	@GeneratedValue
	private Long id;
	private String nome;
	private String email;
	
	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 getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
}

main:

package com.livraria.entidades;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;


public class GeraTabelas {
	public static void main(String[] args){
		EntityManagerFactory factory = Persistence.createEntityManagerFactory("livraria");
		
		EntityManager manager = factory.createEntityManager();
		
		Editora editora = new Editora();
		editora.setEmail("email");
		editora.setNome("Nome editora");
		
		manager.persist(editora);
		
		factory.close();
		System.out.println("ok");
		
	}
}

log:

0 [main] INFO  org.hibernate.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
13 [main] INFO  org.hibernate.Version - HHH000412: Hibernate Core {4.1.3.Final}
17 [main] INFO  org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
19 [main] INFO  org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist
650 [main] INFO  org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000402: Using Hibernate built-in connection pool (not for production use!)
659 [main] INFO  org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000115: Hibernate connection pool size: 20
660 [main] INFO  org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000006: Autocommit mode: true
660 [main] INFO  org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/livraria]
660 [main] INFO  org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000046: Connection properties: {user=root, password=****, autocommit=true, release_mode=auto}
975 [main] INFO  org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
1014 [main] INFO  org.hibernate.engine.transaction.internal.TransactionFactoryInitiator - HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory
1028 [main] INFO  org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory - HHH000397: Using ASTQueryTranslatorFactory
Mai 25, 2012 12:22:46 PM org.hibernate.validator.util.Version <clinit>
INFO: Hibernate Validator 4.1.0.Final
Mai 25, 2012 12:22:46 PM org.hibernate.validator.engine.resolver.DefaultTraversableResolver detectJPA
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
Mai 25, 2012 12:22:46 PM org.hibernate.validator.engine.resolver.DefaultTraversableResolver detectJPA
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
1699 [main] INFO  org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000030: Cleaning up connection pool [jdbc:mysql://localhost:3306/livraria]

Ja tentei varias soluções apontadas em alguns tópicos mas nenhuma funcionou.

alguem consegue visualizar o problema?

Obrigado!

poste o log inteiro

porque essa parte que você postou é apenas INFO e não erro

Att

[quote=tmvolpato]poste o log inteiro

porque essa parte que você postou é apenas INFO e não erro

Att[/quote]

Esse é o log inteiro.

Não há erro mesmo. Antes houvesse!!

troque create para update

Testa ai

[quote=tmvolpato]troque create para update

Testa ai[/quote]

Já tentei validade, update, create. Mesma coisa.

já sei o que é

eu não costumo fazer desse jeito

Você tem uma classe gerar tabela, se eu nao me engano o nome tem que ser igual ao passado nessa classe

preciso ver aqui

não adianta eu mostrar codigo diferente do seu

entao vai um link que vai te ajuda

http://www.java2s.com/Code/Java/JPA/CreateEntityManagerFactory.htm

[quote=tmvolpato]já sei o que é

eu não costumo fazer desse jeito

Você tem uma classe gerar tabela, se eu nao me engano o nome tem que ser igual ao passado nessa classe

preciso ver aqui[/quote]

Cara, nao entendi o que vc quis dizer aqui.

[quote=tmvolpato]não adianta eu mostrar codigo diferente do seu

entao vai um link que vai te ajuda

http://www.java2s.com/Code/Java/JPA/CreateEntityManagerFactory.htm[/quote]

Eu observei o código e vi que a maior diferença é que ele usa transação, mas isso só na inclusão do Professor, e nao na criação da tabela.

As vezes adianta sim me mostrar um codigo diferente. Eu posso pegar a ideia.

Valeu pela ajuda cara, mas poderia me enviar o o jeito que você faz?

você não especificou o tipo de auto incremento no id, tente mudar esse pedaço do codigo de sua entidade:

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

[quote=fabiozanardi]você não especificou o tipo de auto incremento no id, tente mudar esse pedaço do codigo de sua entidade:

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

[/quote]

Acho que quando a estratégia não é especificada a padrão do banco é usada, no caso o auto incremento do MySQL.
Mas o problema não se trata da inclusão em si, e sim dageração da tabela a partir da entidade.

Li em algum lugar que a versão do hibernate que eu estava usando (4.x) está cheia de bugs, incluindo isso de não gerar a tabela.
Então fiz o downgrade pra versão 3.5.

Executei o mesmo código e agora, pelo menos, ocorre um erro:

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named livraria
	at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
	at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
	at com.livraria.entidades.GeraTabelas.main(GeraTabelas.java:10)

O que seria esse “Persistence provider”?

Vou descobrir.

Obrigado pelas dicas.

seu persistence.xml está em uma pasta chamada META-INF/ dentro do classpath?

[quote=fabiozanardi]seu persistence.xml está em uma pasta chamada META-INF/ dentro do classpath?
[/quote]

Cara, tá dentro de WebContent/WEB-INF/classes/META-INF

não deve ficar ai, coloque dentro da pasta que tem seus .class da aplicação, ai é para dar certo, se estiver usando o eclipse para testar, crie 1 pasta chamada META-INF dentro do src/ e jogue o persistence la dentro, veja se da certo

src/META-INF/persistence.xml

Só o problema que persiste kkk

Nao faço ideia do que pode estar acontecendo.

zipa seu projeto e manda no meu email, vou tentar rodar aqui

zanardi@waio.com.br

[quote=fabiozanardi]zipa seu projeto e manda no meu email, vou tentar rodar aqui

zanardi@waio.com.br[/quote]

Enviado.

Valeu, fabio!

está faltando o JAR jar hibernate-persistence-manager, coloca ele na pasta de libs e testa novamente

O problema é realmente os jars necessários da aplicação, coloque todos na pasta de libs do seu projeto, e adicione os jars do hibernate, dom4j, etc no classpath do eclise, o projeto vai rodar normalmente

se nao der certo da 1 toque

abraço

ups, esqueci de postar os jars necessários do hibernate:

hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate3.jar
jta-1.1jar

e as depencencias deles,

deu certo?