Hibernate + jpa Erro[ resolvido]

23 respostas
b10machado
Erro



Informações: 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 USUARIO

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)

at com.Main.main(Main.java:13)

Java Result: 1

estou usando netbeans,indo na aba “Arquivos” ja coloquei na pasta SRC/META-INF/ e web/META-INF/, msm assim nao encontra o arquivo.

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
 
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" 
    mlns: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="USUARIO" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
         
        <properties>
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
            <property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.ClientDriver"/>
            <property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/Teste"/>
            <property name="hibernate.connection.username" value="administrador"/>
            <property name="hibernate.connection.password" value="admin"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
        
    </persistence-unit>
</persistence>

Main

package com;
 
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
 
public class Main {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("USUARIO");
        EntityManager em = emf.createEntityManager();
 
        try {
            em.getTransaction().begin();
             
            User user = new User();
            user.setName("abc123");
            user.setSobrenome("bill");
             
            em.persist(user);
             
            em.getTransaction().commit();
        }
        catch (Exception e) {
            em.getTransaction().rollback();
            e.printStackTrace();
        }
        finally{
            emf.close();
        }
         
        System.out.println("It is over");
    }
}

User

package com;
 
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
 
@Entity
@Table(name="USUARIO")
public class User implements Serializable{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
     
    @Column
    private String name;
     
    @Column
    private String sobrenome;
     
    @Override
    public boolean equals(Object obj) {
        if(obj instanceof User){
            User user = (User) obj;
            return user.getId() == this.getId();
        }
         
        return false;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }

    public String getSobrenome() {
        return sobrenome;
    }

    public void setSobrenome(String sobrenome) {
        this.sobrenome = sobrenome;
    }
 
}

23 Respostas

flaviochess

b10machado, coloca o seu persistence.xml no diretório SRC/conf/

b10machado

vlw cara!!! obrigado.

b10machado

ta com esse erro agora!!

public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("nomeDaPersistenceUnit");
        EntityManager em = emf.createEntityManager();
 
        try {
            em.getTransaction().begin();
             
            User user = new User();
            user.setNome("abc123");
            user.setSobrenome("bill");
             
           
           [b] em.persist(user);[/b] //nessa linha da pau!!
             
            em.getTransaction().commit();
        }
        catch (Exception e) {
            em.getTransaction().rollback();
            e.printStackTrace();
        }
        finally{
            emf.close();
        }
         
        System.out.println("It is over");
    }
b10machado

no printStackTrace();

so aparece isso :s



Hibernate: insert into USUARIO1 (id, nome, sobrenome) values (default, ?, ?)

flaviochess

Aí no seu main você rodou com essa linha assim mesmo:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("nomeDaPersistenceUnit");

??

b10machado

sim por causa do meu persistence

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="nomeDaPersistenceUnit">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
            <property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.ClientDriver"/>
            <property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/Teste"/>
            <property name="hibernate.connection.username" value="administrador"/>
            <property name="hibernate.connection.password" value="admin"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
        
        
    </persistence-unit>
</persistence>
b10machado

meio doido, a tabela sem nenhum dado da pau tando com o set id na mao ou por anotation, inserir o 1 registro na mao no banco, e ai teste o programa com o set id na mao no indice 2 inseriu normal, voltei ao anotation e deu pau… to mais perdido q cego em tiroteio…

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="nomeDaPersistenceUnit">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
            <property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.ClientDriver"/>
            <property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/Teste"/>
            <property name="hibernate.connection.username" value="administrador"/>
            <property name="hibernate.connection.password" value="admin"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>
package com;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
 
@Entity
@Table(name="USUARIO1")
public class User{
    @Id
    //@GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;
     
    @Column(name="nome")
    private String nome;
     
    @Column(name="sobrenome")
    private String sobrenome;
     
    @Override
    public boolean equals(Object obj) {
        if(obj instanceof User){
            User user = (User) obj;
            return user.getId() == this.getId();
        }
         
        return false;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
 
    public String getSobrenome() {
        return sobrenome;
    }

    public void setSobrenome(String sobrenome) {
        this.sobrenome = sobrenome;
    }
 
}
package com;
 
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
 
public class Main {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("nomeDaPersistenceUnit");
        EntityManager em = emf.createEntityManager();
 
        try {
            em.getTransaction().begin();
             
            User user = new User();
            user.setId(2);
            user.setNome("Rafsrl");
            user.setSobrenome("doido");
             
            em.persist(user);
             
            em.getTransaction().commit();
        }
        catch (Exception e) {
            em.getTransaction().rollback();
            e.printStackTrace();
        }
        finally{
            emf.close();
        }
        System.out.println("It is over");
    }}
b10machado

pessoal achei onde esta o problema mais na a soluçao

@Id  
    @GeneratedValue(strategy=GenerationType.AUTO)  
    private int id;

nao esta gerando o id corretamente, alguem sabe como funciona essa parte para gerar automaticamente…

R

@Id
@SequenceGenerator(name = “NOMEDATABELA_GENERATION”, sequenceName = “nome_da_tabela_id_seq”, allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “NOMEDATABELA_GENERATION”)
@Column(name = “id”)

poe isso ae no id (primary key), e tem que configurar no banco ele como sequence.

b10machado

cara essa é minha tabela, me da uma ajuda que eu nao consegui

tb_usuario
smallint id autoincrement start 1 increment 1
varchar nome
varchar sobrenome

@Id (aki blz)
@SequenceGenerator(name = “tb_usuario_GENERATION”, sequenceName = “nome_da_tabela_id_seq”(nao entendi aqui), allocationSize = 1)

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “tb_usuario_GENERATION”)
@Column(name = “id”)

R

Muda no strategy de .SEQUENCE para .AUTO

@GeneratedValue(strategy = GenerationType.AUTO, generator = “tb_usuario_GENERATION”)

e pode tirar o sequenceName la do SequenceGenerator, na verdade, pode tirar o @SequenceGenerator todinho, porque aquilo ali eu uso no oracle. Não sei qual Database você está usando.

R

Tira o generator também, deixa assim e faz um teste.

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private Integer id;
b10machado
@Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "USUARIO12_GENERATION")
    @Column(name = "id")
    private int id;

deu certo nao :S, to usando o banco derby do netbeans

b10machado

nesse tbm :s

R

Xiiiii, de derby sei nada…vou ter que apelar pro google…hehehe…se eu achar algo posto aqui xD fica triste nao, vai dar tudo certo ´-´

R

Coloca so assim entao:

@Id
@GeneratedValue
private Integer id;

ve se funfa ‘-’

R

Tem certeza que o problema é na anotacao ?

Dei uma revisada nas exceptions que voce postou, e percebi isso:

Caused by: java.sql.SQLIntegrityConstraintViolationException: A coluna ‘ID’ não aceita valor nulo.

at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)

at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)

at org.apache.derby.client.am.PreparedStatement.executeUpdate(Unknown Source)

at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:33)

… 16 more

Nao pode inserir valor null.

e em outras exceptions erro de EntityManager…

Tem certeza que são as anotações ?

b10machado

sim pq se eu der set no id na mao nao da pau :S ontem eu fiz d alguma forma pelo gerar numero so q era tipo 23458 , 34900 e etc

AmauriSpPoa

Boa tarde, como está usando o derby, recomendo deixar assim

@GeneratedValue(strategy=GenerationType.AUTO)

E Retirar o

@NotNull

caso tenha

Exclua a tabela do derby e configure o persistence.xml com essa propriedade

<property name="hibernate.hbm2ddl.auto" value="update"/>

Para ele criar a tabela e criar uma forma automática de gerar os valores da pk(uma sequence interna dele).

Espero ter ajudado.

b10machado

opaaa ajudou sim deu certinho nem sabia desse esquema de criar pelo xml vlw

b10machado

entao cara so um problema vi agora…

o id começa com um numero monstro rsrs 524288 …

num tem como ser 1,2,3 e por ai vai ???

AmauriSpPoa

Cara isso ai já é uma questão do Derby, não sou expert no Derby.

E eu acho que caberia um outro tópico, pois a questão do Hibernate + Jpa já foi, e se tem alguém aqui manja de Derby pode te ajudar. Fica mais fácil se o problema estiver no titulo do tópico.

b10machado

ata blz e que aki nao dar pra testar em outro banco, vou ver em casa vlw

Criado 25 de setembro de 2012
Ultima resposta 1 de out. de 2012
Respostas 23
Participantes 4