Como implementar a JPA

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?

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