Fala pessoal andei lendo lendo um pouco sobre a JPA.
Sei que pra utilizar preciso de um provedor. Que pode ser o hibernate, mas não achei nada muito preciso. Alguem pode me passar algo mais completo sobre o assunto?
Como implementar a JPA
6 Respostas
Você pode utilizar o TopLink da Oracle também:
http://www.oracle.com/technology/products/ias/toplink/jpa/tutorials/jsf-jpa-tutorial.html
Nossa to quebrando a cabe ca com isto!
Tenho uns exemplos aqui + nao funciona.
package com.br.sqlm;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Pessoa {
private String nome;
private String sobrenome;
private Integer id;
@Id
@GeneratedValue
public void setId(Integer id){
this.id = id;
}
public void setNome(String nome){
this.nome = nome;
}
public void setSobrenome(String sobrenome){
this.sobrenome = sobrenome;
}
public Integer getId(){
return id;
}
public String getNome(){
return nome;
}
public String getSobrenome(){
return sobrenome;
}
public String toString(){
return sobrenome + ", " + nome;
}
}
package com.br.sqlm;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class SavePessoa {
public void exec() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myContext");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Pessoa p = new Pessoa();
p.setNome("Silvio");
p.setSobrenome("ss");
em.persist(p);
tx.commit();
em.close();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1_0.xsd"
version="1.0">
<persistence-unit name="myContext" transaction-type="RESOURCE_LOCAL">
<provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
<class>com.br.sqlm.Pessoa</class>
<properties>
<property name="toplink.jdbc.driver"
value="org.postgresql.Driver"/>
<property name="toplink.jdbc.url"
value="jdbc:postgresql://localhost/testeJpa?charSet=LATIN1"/>
<property name="toplink.jdbc.user"
value="postgres"/>
<property name="toplink.jdbc.password"
value=""/>
<property name="toplink.target-database"
value="auto"/>
<property name="toplink.logging.level"
value="INFO"/>
</properties>
</persistence-unit>
</persistence>
Por fim chamo de um servlet.
package servlets.teste;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class ServTeste extends HttpServlet {
int operacao;
String msgErro;
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException{
doGet(request,response);
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException{
// Recebendo dados
if(request.getParameter("operacao")!=null && !request.getParameter("operacao").equals("")){
operacao = Integer.parseInt(request.getParameter("operacao"));
}
if (operacao == 1){
com.br.jeebrasil.dominio.Princip princip =
new com.br.jeebrasil.dominio.Princip();
princip.teste();
System.out.println("passou");
}
if (operacao == 2){
com.br.sqlm.SavePessoa sp = new com.br.sqlm.SavePessoa();
sp.exec();
System.out.println("passou OP 2 ");
}
} //DoGet
}
E o erro.
javax.persistence.PersistenceException: No Persistence provider for EntityManager named myContext
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:89)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)
com.br.sqlm.SavePessoa.exec(SavePessoa.java:12)
servlets.teste.ServTeste.doGet(ServTeste.java:37)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
Sera q alguem tem uma luz ai?
Você colocou os .jars do toplink na lib da sua aplicação?
Verifique usando o modo debug o valor da variável emf nessa linha:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myContext");
Opa coloquei sim.
os dois
toplink-essentials e essentials-agent.
Não entendi, oque a de errado com a variavel?
Você colocou o persistence.xml dentro do diretório META-INF no WEB-INF/src?
Carneiro, tudo jóia?
Pelo que observei você já possui um conhecimento com Toplink, por isso gostaria de te fazer uma pergunta, derrepente você conseguirá me ajudar. Segue abaixo:
É possível fazer uma mapeamento 1 x N e com isso realizar uma persistência de um objeto e automaticamente persistir a collection de objetos relacionado?
Vou tentar passar o meu problema de outra forma:
Imagine que tenho duas tabelas no banco de dados (Pai e Filho), onde, 1 pai tem nenhum ou muitos filhos. Neste caso, preciso persistir um pai e com isto persistir todos os filhos relacionados.
Até onde eu sei, o hibernate possibilita isso e o Toplink não. Pelo que entendi a especificação da JPA define que para este caso deve-se criar uma terceira tabela (passando de 1xN para NxM), e o Toplink segue a risca especificação. Neste caso o hibernate está oferecendo um serviço a mais…
Mas sabe como é né, sempre tem-se uma esperança nesse mundo do Java. =)
Então, caso tenha como solucionar este meu problema, agradeço.
[]s