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

10 respostas
M

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

R

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.

M

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

Valeu…

R
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.

M

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.

R

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…

R

[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