Não consigo persistir dados com hibernate

Boa noite sou novo com hibernate e nao consigo persistir os dados quando compilo uma classe teste. da o seguinte erro

0 [main] INFO org.hibernate.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.1.Final} 9 [main] INFO org.hibernate.Version - HHH000412: Hibernate Core {4.1.0.Final} 14 [main] INFO org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found 18 [main] INFO org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist 58 [main] INFO org.hibernate.ejb.Ejb3Configuration - HHH000318: 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 fj21 at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) at br.com.exercicios.teste.TestaInsereProduto.main(TestaInsereProduto.java:14)

Minha classe Produto

[code]package br.com.exercicios.entities;

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

@Entity
public class Produto {
@Id
@GeneratedValue
int id;
String nome;
double preco;

public int getId() {
return id;
}
private void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public double getPreco() {
return preco;
}
public void setPreco(double preco) {
this.preco = preco;
}
}[/code]

Classe Testa

[code]package br.com.exercicios.teste;

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

import br.com.exercicios.entities.Produto;

public class TestaInsereProduto {

public static void main(String[] args) {

EntityManagerFactory factory =
Persistence.createEntityManagerFactory(“fj21”);
EntityManager em = factory.createEntityManager();

Produto p = new Produto();
p.setNome(“camiseta”);
p.setPreco(12.23);

em.getTransaction().begin();

em.persist§;

em.getTransaction().commit();

em.close();
}
}[/code]

eo persistence.xml

[code]<?xml version="1.0" encoding="UTF-8"?>

org.hibernate.ejb.HibernatePersistence entities.Produto







[/code]

obrigado

Olha também sou um tanto iniciante em hibernate.

Na minha opinião vc deveria ter utilizado na declaração da classe a anotação @Table(name="") onde “name” é o nome da tabela.

outra coisa que não vi foi a declaração das colunas utilizando a anotação @Column pois é através dela que o hibernate vai relacionar os campos do seu bean com as colunas da tabela no banco de dados.

A anotação @GeneratedValue precisa de que sejam definidos dois parâmetros o “generator” e o “strategy” que devem ser definidos para que o hibernate possa gerar o identificador do registro, e dependendo da estratégia utilizada(parâmetro ‘strategy’) você vai ter de definir um “generator” especifico tipo para a estratégia GenerationType.SEQUENCE você vai ter de definir um generator com a anotação @SequenceGenerator e especificar o parâmetro “name” e “sequenceName” e para este caso recomendo definir também o “allocationSize” para 1 porque senão toda vez que você montar uma SessionFactory ele vai alocar um espaço padrão de 50 números na sequência que gera seus identificadores podendo deixar um vácuo nos identificadores e fazendo com que você não use todos os números da sequência.

Daí então sua classe ficaria assim.

@Entity  
public class Produto {  
@Id  
@GeneratedValue(generator="gen_produto",strategy=GenerationType.SEQUENCE)
// Se tiver vários esquemas pode também qualificar a sequência com o esquema assim "esquema.sq_produto"
@SequenceGenerator(name="gen_produto",allocationSize=1,sequenceName="sq_produto") 
                                       
@Column(name="id") // id também precisa por que também é uma coluna da tabela.
int id;  
@Column(name="nome")
String nome;  
@Column(name="preco")
double preco; 

// Getters e Setters abaixo. 

Qualquer coisa vc pode usar o NetBeans para gerar todo este código.

Na versão 6.8 do net beans você clica com o botão esquerdo em cima do pacote que vai receber as classes=> vai em novo => Persistence => Classe entidade do banco de dados.

Agora se você quer que estes beans sejam portáveis para outros bancos de dados com mesmo esquema não marque a opção “Nomes de tabela de banco de dados totalmente qualificados”.

Daí você segue o assistente e pronto.
Desculpe se foi muito longo na explicação e eu espero ter ajudado. :slight_smile:

tbm sou noso com hibernate… o persistence.xml ta no local correto?

Olá, não querendo fazer propoganda, mas já fazendo rsrs

TEnho mantido um blog (tentado ao menos rs), abordei alguns posts sobre JPA com hibernate, estão bem passo a passo. Dê uma visitada por lá, talvez possa ajudar: www.serjava.blogspot.com.

O erro tá bem na cara:

Could not find any META-INF/persistence.xml file in the classpath

O persistence.xml tem que ficar na pasta src/META-INF

1 curtida

meu persistence.xml está dentro da pasta META-INF como disse, mas mesmo assim da este erro

[quote=titata]

meu persistence.xml está dentro da pasta META-INF como disse, mas mesmo assim da este erro[/quote]

sim, mas em qual pasta está a pasta META-INF ? além disso, está sendo feito o deploy do arquivo ? ele está indo para o .jar/.war ? pois o erro é esse.

[quote=rmendes08][quote=titata]

meu persistence.xml está dentro da pasta META-INF como disse, mas mesmo assim da este erro[/quote]

…além disso, está sendo feito o deploy do arquivo ? ele está indo para o .jar/.war ? pois o erro é esse.[/quote]

ai vc falou grego pro iniciante aki rs… mas o caminho aki está WebContent/META-INF/persistence.xml

você está usando o Eclipse ? coloque uma cópia do META-INF na pasta src.

to sim… deu certo, nao pode haver esta pasta Webcontent no meio delas 1 erro resolvido mas 3.454.236 a mais gerados agora heheeh

0 [main] INFO org.hibernate.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.1.Final} 10 [main] INFO org.hibernate.Version - HHH000412: Hibernate Core {4.1.0.Final} 13 [main] INFO org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found 15 [main] INFO org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: fj21] class or package not found at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1400) at org.hibernate.ejb.Ejb3Configuration.addClassesToSessionFactory(Ejb3Configuration.java:1183) at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1047) at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:290) at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:372) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:55) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) at br.com.exercicios.teste.TestaInsereProduto.main(TestaInsereProduto.java:14) Caused by: java.lang.ClassNotFoundException: entities.Produto at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at org.hibernate.internal.util.ReflectHelper.classForName(ReflectHelper.java:170) at org.hibernate.ejb.Ejb3Configuration.classForName(Ejb3Configuration.java:1317) at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1389) ... 8 more

Para mapear a classe você precisa colocar o nome completo dela na tag :

<class>br.com.exercicios.entities.Produto</class>

ai sim meu fiii agora deu certo tdo vlw show de bola… vcs acabam de ganhar um tijolinho no céu hehe