Un contexto de persistencia es una agrupación de instancias unicas de entidades que son gestionados por el proveedor de persistencia en tiempo de ejecución. Un término similar es la unidad de persistencia, que es el conjunto de todas las clases de entidad que podría utilizar una aplicación. Una unidad de persistencia define un grupo de entidades mapeadas a una base de datos.
Entidades tienen estados de ciclos de vida en la especificación de la API. Conocer el estado de su ciclo de vida le ayudará a entender los efectos de las operaciones de la API en esas entidades. Los distintos estados se enumeran aquí:
- Nuevo - Las entidades nuevas son nuevos objetos en su aplicación. Una nueva entidad puede existir en su aplicación, pero el contexto de persistencia todavía no es consciente de la entidad.
- Gestionado - Las entidades gestionadas son entidades que han persistido o que ya existen en la base de datos. Estas entidades tienen una identidad en el contexto de persistencia.
- Independiente - Las entidades independientes tienen identidad persistente, pero no son gestionados activamente dentro de un contexto de persistencia.
- Eliminado - Las entidades eliminadas existen en un contexto de persistencia, pero están programadas para ser retirados o eliminados de ese contexto.
Las próximas secciones describe algunas de las operaciones que se pueden utilizar en las entidades y le dará una idea acerca de cómo mover las entidades a través de los distintos estados del ciclo de vida.
Creacion de una nueva entidad
Desde entidades POJOs, puede crearlas tal como lo haría con cualquier otro objeto. Puede utilizar la palabra clave new para crear nuevas instancias de su clase. Usted crea una nueva entidad Jugador usando la palabra clave new que invoca el constructor de Jugador:
Player p = new Player();
En este punto, puede establecer el nombre del jugador, el número e información relacionada. Asimismo, puede establecer las propiedades con un constructor. Esto es especialmente útil y conveniente cuando utilice las anotaciones de persistencia basadas en campos en lugar de anotaciones basadas en propiedades. Las nuevas entidades aún no están gestionados por algun contexto de persistencia.
Manegador de entidades
Para persistir una nueva entidad necesita una instancia de un EntityManager. Obtener una instancia de EntityManager es fácil, pero es tortuoso en los entornos de escritorio. Necesitará una instancia de EntithyManagerFactory para crear un objeto EntityManager. Tendrá que utilizar la clase Persistence clase para obtener la factoria. La clase Persistence es la clase de arranque utilizada en entornos de Java SE.
El siguiente código muestra cómo crear una instancia EntityManager en un entorno de escritorio Java SE. Desde la instancia EntityManager que representan una unidad de persistencia, debe proporcionar el nombre de la unidad de persistencia. En este ejemplo, Liga es el nombre de la unidad de persistencia. Una vez más, una unidad de persistencia define un conjunto de entidades que son asociadas con una aplicación y que se almacenan en una base de datos. El nombre de la liga se declara en el archivo persistence.xml junto con otras propiedades.
// Create the EntityManager
EntityManagerFactory factory = Persistence.createEntityManagerFactory("league");
EntityManager em = factory.createEntityManager();
Entidades gestionadas
Ahora que tiene un objeto EntityManager, puede utilizarlo para crear las consultas y transacciones en un entorno de escritorio. Antes de guardar las nuevas entidades Jugador y Equipo, debe comenzar una transacción. Durante la operación, use el metodo persist del EntityManager para la gestión de una nueva entidad. Las nuevas entidades se ponen en estado gsetionado cuando son persistidos. Debe dar commit a la transacción para que los cambios se guarden en la base de datos. No es de extrañar que vaya a utilizar los metodos begin y commit para estas operaciones.
El código siguiente muestra cómo puede crear y guardar varios jugadores y asignacion de equipo de tareas - por lo menos como son asignados hasta ahora en la temporada 2007 en el Béisbol de las Grandes Ligas.
public class CreatePlayersAndTeams {
/** Creates a new instance of CreatePlayersAndTeams */
public CreatePlayersAndTeams() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// Create the EntityManager
EntityManagerFactory emf = Persistence.createEntityManagerFactory("league");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
for(Team team: teams) {
em.persist(team);
}
for(Player player: players) {
player.setTeam(teams[0]);
teams[0].addPlayer(player);
em.persist(player);
}
em.getTransaction().commit();
em.close();
emf.close();
}
private static Player[] players = new Player[] {
// name, number, last quoted statement
new Player("Lowe", "Derek", 23, "The sinker's been good to me."),
new Player("Kent", "Jeff", 12, "I wish I could run faster."),
new Player("Garciaparra", "Nomar", 5, "No, I'm not superstitious at all.")
};
public static Team[] teams = new Team[] {
new Team("Los Angeles Dodgers", "National"),
new Team("San Francisco Giants", "National"),
new Team("Anaheim Angels", "American"),
new Team("Boston Red Sox", "American")
};
}