Tweeteame!
(Continua de parte 1)
La entidad para nuestro estudiante la declaramos de la siguiente forma:
@Entity
public class Estudiante {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int estudianteId;
@Basic
@Column(nullable = false)
private String nombre;
@OneToOne
@JoinColumn(nombre="proyecto_id")
private Proyecto proyecto;
public Estudiante(String nombre) {
this.nombre = nombre;
}
public String getNombre() {
return nombre;
}
// Getters and Setters
}
Para correr este ejemplo he usado Apache OpenJPA, con lo que el archivo persistence.xml quedará de la siguiente forma:
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.0">
<persistence-unit name="ejemplo_debugmodeon.com" transaction-type="RESOURCE_LOCAL">
<class>ejemplo.Organizacionclass>
<class>ejemplo.Proyectoclass>
<class>ejemplo.Estudianteclass>
<properties>
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema"/>
<property name="openjpa.ConnectionURL"
value="jdbc:mysql://localhost/OpenJPARelations"/>
<property name="openjpa.ConnectionDriverName"
value="com.mysql.jdbc.Driver"/>
<property name="openjpa.ConnectionUserName"
value="user"/>
<property name="openjpa.ConnectionPassword"
value="password"/>
<property name="openjpa.Log"
value="File=../RelationsExample.log,
DefaultLevel=WARN,SQL=TRACE"/>
properties>
persistence-unit>
persistence>
Finalmente creamos los métodos para insertar y leer las entidades:
public void insertaValores() {
// Creamos el la factoría de EntityManagers con el
// nombre que le hemos dado a en la declaración del xml
// persistence-unit name="ejemplo_debugmodeon.com"
EntityManagerFactory factory = Persistence.
createEntityManagerFactory("ejemplo_debugmodeon.com",
System.getProperties());
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Organizacion organizacion =
new Organizacion(" The Apache Software Foundation");
Proyecto proyecto =
new Proyecto("Streaming LOB support (for OpenJPA)");
Estudiante estudiante = new Estudiante("Ignacio Andreu");
estudiante.setProyecto(proyecto);
proyecto.setEstudiante(estudiante);
proyecto.setOrganizacion(organizacion);
organizacion.addProyecto(proyecto);
proyecto = new Proyecto("Maven Dependency Visualization");
estudiante = new Estudiante("Peter Kolbus");
estudiante.setProyecto(proyecto);
proyecto.setEstudiante(estudiante);
proyecto.setOrganizacion(organizacion);
organizacion.addProyecto(proyecto);
em.persist(organizacion);
organizacion = new Organizacion(" Mono Proyecto");
proyecto = new Proyecto("Gendarme Tasks");
estudiante = new Estudiante("Néstor Salceda");
estudiante.setProyecto(proyecto);
proyecto.setEstudiante(estudiante);
proyecto.setOrganizacion(organizacion);
organizacion.addProyecto(proyecto);
em.persist(organizacion);
em.getTransaction().commit();
em.close();
factory.close();
}
public void leeValores() {
EntityManagerFactory factory = Persistence.
createEntityManagerFactory("ejemplo_debugmodeon.com",
System.getProperties());
EntityManager em = factory.createEntityManager();
Query q = em.createQuery("select o from Organizacion o");
for (Organizacion organizacion : (List)q.getResultList()) {
System.out.println("Organizacion: "
+ organizacion.getName());
if (organizacion.getProyectos() != null &&
organizacion.getProyectos().size() > 0) {
for (Proyecto p : organizacion.getProyectos()) {
System.out.println("-"
+ p.getName()
+ " asignado a "
+ p.getEstudiante().getName());
}
} else {
System.out.println("No contiene proyectos todavia");
}
}
em.close();
factory.close();
}
La salida por pantalla sería algo como:
[java] Organizacion: The Apache Software Foundation
[java] -Streaming LOB support (for OpenJPA) asignado a Ignacio Andreu
[java] -Maven Dependency Visualization asignado a Peter Kolbus
[java] Organizacion: Mono Project
[java] -Gendarme Tasks asignado a Néstor Salceda
Fuente: www.debugmodeon.com
| < Prev | Próximo > |
|---|