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