Inyección del Entity Manager y transacciones básicas

Para realizar transacciones contra la Base de Datos, necesitamos una instancia del objeto Entity Manager, la cual obtenemos gracias a la anotación @PersistenceContext :

package com.origami.capacitacion.service;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 * @author Fernando
 */
@Stateless
public class PersonasService implements PersonasServiceLocal {

    @PersistenceContext(unitName = "com.origami_capacitacion_war_1.0-SNAPSHOTPU")
    private EntityManager em;

}

Guardado con Persist:

Para hacer un Insert en la base de datos usamos el método persist() del Entity Manager, como en el siguiente ejemplo:

em.persist(persona);

Quedando el metodo guardar() en el EJB así:

    @Override
    public Persona guardar(Persona persona){
        em.persist(persona);
        return persona;
    }

Encontrar un Entity por su Primary Key

Para obtener un entity desde la base de datos por su primary key usamos el método find() del Entity Manager.
find() recibe dos parámetros: la clase Entity y el identificador único.
Por ejemplo si deseamos obtener el objeto Persona con PK = 1(Long) haríamos esto:

    em.find(Persona.class, 1L);

Entonces si deseamos crear un método transaccional que encuentre un entity Persona por su Id, definimos el siguiente método en el EJB:

    @Override
    public Persona getById(Long id){
        // encuentra el entity por su Pimary Key
        return em.find(Persona.class, id);
    }

Modificar un Entity en base de datos

Dado que conocemos el modelo de persistencia, sabemos que al obtener un Entity Persistente podemos modificarlo y esas modificaciones se harán efectivas en base de datos al finalizar la transaccion EJB o al usar el método flush() del EntityManager.
Entonces podemos definir un método modificar de la siguiente manera:

    @Override
    public Persona modificar(Persona persona){
        // obtener entity persistente por el ID:
        Persona personaPersistente = getById(persona.getId());
        // modificar los atributos correspondientes en el entity persistente:
        personaPersistente.setApellidos(persona.getApellidos());
        personaPersistente.setCedula(persona.getCedula());
        personaPersistente.setCelular(persona.getCelular());
        personaPersistente.setConvencional(persona.getConvencional());
        personaPersistente.setDireccion(persona.getDireccion());
        personaPersistente.setEmail(persona.getEmail());
        personaPersistente.setNombres(persona.getNombres());
        // sincronizar datos persistentes con base de datos:
        em.flush();
        return personaPersistente;
    }

Eliminar un Entity en base de datos

Usamos el método remove() del EntityManager. Éste recibe como parámetro el entity persistente a eliminar, y lo podemos usar en un m;etodo transaccional del EJB de la siguiente manera:

    @Override
    public void eliminar(Persona persona){
        // obtener entity persistente por el ID:
        Persona personaPersistente = getById(persona.getId());
        // eliminar:
        em.remove(personaPersistente);
        em.flush();
    }