[RESOLVIDO]JPA + Hibernate não estão gerando tabelas no banco MySQL

10 respostas
manolo

Boa Noite Pessoal!

Galera estou desenvolvendo um trabalho da faculdade, mas tá dando um pepino atrás do outro, isso porque sou iniciante e nao tenho muita pratica.

Estou realizando um projeto utilizando JPA e o Hibernate, mas já li varios casos semelhantes e nenhum até agora solucionou o meu problema.

O que ocorre é que simplesmente minhas tabelas não estão sendo geradas no banco (estou usando o MySql)

Alguem pode me dar um help, creio que minha duvida em algum momento na vida possa ser de outra pessoa.

Bem, vou postar as classes pertinentes, caso falte alguma é só pedir.

persistent.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/persistence_2_0.xsd">
  <persistence-unit name="CahiPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.accurate.model.Usuario</class>
    <class>com.accurate.model.SystemUser</class>
    <class>com.accurate.model.Tasks</class>
    <class>com.accurate.model.Project</class>
    <class>com.accurate.model.Teste</class>
    <properties>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/cahi"/>
      <property name="javax.persistence.jdbc.user" value="root"/>
      <property name="javax.persistence.jdbc.password" value="pomarola"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
      <property name="hibernate.connection.shutdown" value="true"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
      <property name="hibernate.show_sql" value="false"/>
      <property name="hibernate.format_sql" value="false"/>
    </properties>
  </persistence-unit>
</persistence>

Exemplo de um entidade:

[b]@Entity
@Table(name = "project")
@NamedQuery(name = "Usuario.findUserByName", query = "select u from SystemUser u where u.name = :name")
public class Project implements Serializable {
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idProject")
    private int idProject;
    @Column(name = "name", length = 45, nullable=false)
    private String name;
    @Column(name = "startDate", length = 45)
    @Temporal(TemporalType.DATE)
    private Date startDate;
    @Column(name = "finishDate", length = 45)
    @Temporal(TemporalType.DATE)
    private Date finishDate;
    @JoinColumn(name = "fk_idSystemUser", referencedColumnName = "idSystemUser")
    @ManyToOne
    private SystemUser idSystemUser;
    @OneToMany(mappedBy = "idProject")
    private Collection<Tasks> tasksCollection;

//Abaixo segue os getters e setters[/b]
Agradeço a todos pela atenção.

10 Respostas

romarcio

E aparece alguma mensagem de erro no console?
Outra coisa, você já criou o banco de dados no MySql? O Hibernate vai apenas criar as tabelas não o banco.

manolo

Oi romarcio, não aparece nenhuma mensagem no console.
Sim o banco está criado tem até tabelas que criei anteriormente rodando.

Valeu…

romarcio
manolo:
Oi romarcio, não aparece nenhuma mensagem no console. Sim o banco está criado tem até tabelas que criei anteriormente rodando.

Valeu...


Estranho :(

Tenta criar usando essa classe então:
package br.mb.tutorialHibernateJpa.agenda;

import org.hibernate.cfg.Configuration;
import org.hibernate.ejb.Ejb3Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class GeraBanco {
    public static void main(String[] args) {
        Ejb3Configuration cfg = new Ejb3Configuration();

        //agenda eh o nome do persistence-unit no persistence.xml.
        cfg.configure("agenda", null);

        Configuration hbmcfg = cfg.getHibernateConfiguration();

        SchemaExport schemaExport = new SchemaExport(hbmcfg);
        schemaExport.create(true, true);
    }
}
J

manolo:
Oi romarcio, não aparece nenhuma mensagem no console.
Sim o banco está criado tem até tabelas que criei anteriormente rodando.

Valeu…

Dropa as tabelas e os squences e roda novamente o projeto. Aqui sempre dava esse bug ae eu dropava e pimba.

manolo

Olá romarcio! Então, também não funcionou da maneira que você descreveu acima.

Incriveu que pareça da maneira que o JahCode passou funcionou!

Não me pergunte o motivo, pois eu tbm gostaria de saber rs…rs…

Valeu a todos pela força. Bom final de semana.

J

manolo:
Olá romarcio! Então, também não funcionou da maneira que você descreveu acima.

Incriveu que pareça da maneira que o JahCode passou funcionou!

Não me pergunte o motivo, pois eu tbm gostaria de saber rs…rs…

Valeu a todos pela força. Bom final de semana.

Esse é um bug do JPA. Eu também não sei o porque ocorre vou procurar melhor o porque disso e posto mais tarde.

Precisando prende o grito.

romarcio

Estranho esse comportamento do JPA.

Chegou a testar por exemplo, mudar o atributo de update para create ou drop? Para ver se ele fazia isso?

J

[quote=romarcio]Estranho esse comportamento do JPA.

Chegou a testar por exemplo, mudar o atributo de update para create ou drop? Para ver se ele fazia isso?

Sim sim, não tem o q eu mude que o faça persistir… só dropando no bd, eu uso o postgreSQL que pra mim é um dos melhores bds free, e as vezes ele roda mas varias vezes tenho q dropar tudo…

romarcio

[quote=JahCode]

romarcio:
Estranho esse comportamento do JPA.

Chegou a testar por exemplo, mudar o atributo de update para create ou drop? Para ver se ele fazia isso?

Sim sim, não tem o q eu mude que o faça persistir… só dropando no bd, eu uso o postgreSQL que pra mim é um dos melhores bds free, e as vezes ele roda mas varias vezes tenho q dropar tudo…

Eu não costumo usar postgreSQL, mas ele não trabalha com Sequencia? Você não teria que ter configurado as entidades como Sequence e não Identity?

@Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)  
    @Column(name = "idProject")  
    private int idProject;
J

[quote=romarcio]

JahCode:
romarcio:
Estranho esse comportamento do JPA.

Chegou a testar por exemplo, mudar o atributo de update para create ou drop? Para ver se ele fazia isso?

Sim sim, não tem o q eu mude que o faça persistir… só dropando no bd, eu uso o postgreSQL que pra mim é um dos melhores bds free, e as vezes ele roda mas varias vezes tenho q dropar tudo…

Eu não costumo usar postgreSQL, mas ele não trabalha com Sequencia? Você não teria que ter configurado as entidades como Sequence e não Identity?

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "idProject") private int idProject;

Sim mesmo alterando a config é a mesma coisa. Um professor meu me respondeu hoje que isso vai ser corrigido na proxima versão do hibernate, eu achava q era o jpa mas pelo q o professor falou isso é bug do driver hibernate.

Criado 30 de novembro de 2012
Ultima resposta 2 de dez. de 2012
Respostas 10
Participantes 3