Olá Pessoal, não estou conseguindo gerar uma tabela a partir do JPA/hibernate.
Esse é o meu persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
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_2_0.xsd">
<persistence-unit name="pu-meubanco" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>modelo.Usuario</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="hibernate.hbm2dll.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/meubanco" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="123456" />
</properties>
</persistence-unit>
</persistence>
Esse é minha entidade que representa a tabela no banco de dados:
package modelo;
import java.util.Calendar;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Usuario {
@Id
@GeneratedValue
private Long id;
@Column(unique = true)
private String email;
@Temporal(TemporalType.DATE)
private Calendar dataDeCadastro;
@Lob
private byte[] foto;
//getters e setters
}
E aqui, a minha classe responsável por gerar o banco:
package util;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class GeraTabelas {
public static void main(String[] args) {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("pu-meubanco");
factory.close();
}
}
Já tenho o esquema meubanco criado direitinho. Quando executo o programa nenhuma exception é gerada porém o a tabela também não é gerada.
Vejam o log gerado:
log4j:WARN No such property [conversationPattern] in org.apache.log4j.PatternLayout.
Hibernate Annotations 3.5.0-Final
Hibernate 3.5.0-Final
hibernate.properties not found
Bytecode provider name : javassist
using JDK 1.4 java.sql.Timestamp handling
Hibernate Commons Annotations 3.2.0.Final
Hibernate EntityManager 3.5.0-Final
Binding entity from annotated class: modelo.Usuario
Bind entity modelo.Usuario on table Usuario
Hibernate Validator not found: ignoring
Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
Using Hibernate built-in connection pool (not for production use!)
Hibernate connection pool size: 20
autocommit mode: true
using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/meubanco
connection properties: {user=root, password=****, autocommit=true, release_mode=auto}
RDBMS: MySQL, version: 5.1.54-1ubuntu4
JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.0.7 ( $Date: 2007-03-09 22:13:57 +0100 (Fri, 09 Mar 2007) $, $Revision: 6341 $ )
Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
Transaction strategy: org.hibernate.transaction.JDBCTransactionFactory
No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
Automatic flush during beforeCompletion(): disabled
Automatic session close at end of transaction: disabled
JDBC batch size: 15
JDBC batch updates for versioned data: disabled
Scrollable result sets: enabled
JDBC3 getGeneratedKeys(): enabled
Connection release mode: auto
Maximum outer join fetch depth: 2
Default batch fetch size: 1
Generate SQL with comments: disabled
Order SQL updates by primary key: disabled
Order SQL inserts for batching: disabled
Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
Using ASTQueryTranslatorFactory
Query language substitutions: {}
JPA-QL strict compliance: enabled
Second-level cache: enabled
Query cache: disabled
Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory
Optimize cache for minimal puts: disabled
Structured second-level cache entries: disabled
Echoing all SQL to stdout
Statistics: disabled
Deleted entity synthetic identifier rollback: disabled
Default entity-mode: pojo
Named query checking : enabled
Check Nullability in Core (should be disabled when Bean Validation is on): enabled
building session factory
Not binding factory to JNDI, no JNDI name configured
closing
cleaning up connection pool: jdbc:mysql://localhost:3306/meubanco
É óbvio que eu posso construir a tabela na mão, e até fiz isso e criei uma classe de teste para inserir um registro e funcionou perfeitamente. Vejam a classe de teste:
package teste;
import java.util.Calendar;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import modelo.Usuario;
public class AdicionaUsuario {
public static void main(String[] args) {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("pu-meubanco");
EntityManager manager = factory.createEntityManager();
manager.getTransaction().begin();
Usuario usuario = new Usuario();
usuario.setEmail("contato@contato.contanto.com..tato");
usuario.setDataDeCadastro(Calendar.getInstance());
manager.persist(usuario);
manager.getTransaction().commit();
manager.close();
factory.close();
}
}
A verdade é que eu fiquei intrigado por não ter conseguido gerar a tabela a partir da classe GeraTabela.java. Alguem poderia me responder porque não estou conseguindo gerar essas tabelas automaticamente pelo JPA/Hibernate?