2.1 Llave primaria compuesta con @IdClass:

<< Anterior - Volver Menu JPA - Siguiente >>

Para la generacion de llaves primarias compuestas de tipo @IdClass en el Framework Taylor se deben crear por lo menos dos clases:

Clase 1:

  • Es una clase pura de java publica. Para esto seleccionamos el nombre de la clase en el navegador de ficheros de java que se encuentra en la parte izquierda, y en la parte inferior de la pantalla se encuentra las propiedades de ese objeto seleccionamos la opcion Sterotypes y miramos en el contenedor con nombre Applied Sterotypes que no tenga el estereotipo Entity, si lo tiene lo seleccionamos y le damos la opción remover.
  • La clase implementa la clase Serializable.
  • La clase debe tener los atributos que conforman la llave primaria compuesta con sus respectivos getters y setters.
  • La clase en su método constructor debe de estar sin argumentos.
  • La clase debe de implementar los metodos hashCode() y equals(). Esto se hace a mano como se puede ver mas adelante, ya que es una clase pura y Taylor no genera estos metodos.

Clase 2:

  • Es una clase de tipo Entidad, esto quiere decir que esta anotada con @Entity.
  • La clase debe implementar la clase Serializable.
  • La clase Entidad debe tener los mismo campos o atributos de la primera clase.
  • La clase Entidad debe estar anotada con @IdClass. Para esto seleccionamos el objeto que representa la clase Entidad en el navegador de ficheros de java de la parte izquierda, luego nos dirigimos a la parte inferior de la pantalla donde se encuentra las propiedades de ese objeto, luego seleccionamos la obcion Stereotypes y en el contenedor con el nombre Avaliable Stereotypes seleccionamos el estereotipo IdClass y le damos la opción “Add»” para que se nos añada ese estereotipo a la clase, luego en esa misma parte seleccionamos la opción Stereotypes Attributes y donde este el estereotipo IdClass seleccionamos el atributo value y le ingresamos el nombre de la clase seguido “.class” (<nombre clase>.class), esto se puede ver en la siguiente imagen.
Atributo IdClass
  • Los atributos de la clase Entidad que van a formar la llave primaria compuesta deben estar anotados con el estereotipo @Id, para esto seleccionamos los atributos del objeto que representa la clase Entidad en el navegador de la parte izquierda y luego nos dirigimos a la parte inferior de la pantalla donde se encuentran las propiedades del atributo, luego seleccionamos la opcion Stereotypes y en el contenedor de nombre Avaliable Stereotypes seleccionamos el estereotipo Id y luego le damos la opcion “Add»”.

En la perspectiva Taylor de Eclipse se debe ver como el ejemplo a continuación de la siguiente figura.

perspectivaTaylor11.JPG

Para generar las Entidades y las clases en Taylor es solo dirigirse al navegador de ficheros u objetos que se encuentra en la parte izquierda de la ventana de Eclipse, y con clic derecho seleccionamos el objeto que esta representado con el icono objeto, en el caso de la imagen anterior ese objeto tiene el nombre de <Modelo> Tutorial, luego se desplegara un menú emergente, nos dirigimos al submenu, luego al submenu By Project Suffyx y por ultimo al comando jpa, esto hará que Taylor genere dos carpetas y dentro de ellas se encuentran las Clases java. Como se puede ver en las siguientes dos imágenes:

perspectivaTaylor12.JPG
navegadorEclipse.JPG

Ahora veremos el ejemplo de la imagen pero visto en código java:

Calse 1: PersonaPk.class (Clase pura).

// Se implementa la clase Serializable
public class PersonaPk implements Serializable{
    /** @generated */
    private static final long serialVersionUID = 1L;

    /** Metodo Constructor sin Argumentos */
    public PersonaPk() {
    }

    //Metodo getter de la primera llave priamaria
    public Long getId() {
        return id;
    }

    /** @generated */
    //Metodo setter de la primera llave primaria
    public void setId(final Long id) {
        this.id = id;
    }

    /** @generated */
    private Long id = null;

    *
    *
    *El resto de Atributos y los métodos getters y setters de dichos atributos.
    *
    *

    //Metodo getter de la segunda llave priamaria
    public String getCedula() {
        return cedula;
    }

    /** @generated */
    //Metodo setter de la segunda llave primaria
    public void setCedula(final String cedula) {
        this.cedula = cedula;
    }

    /** @generated */
    private String cedula = null;

    /** Se implementa el metodo hashCode() de esta forma */
    public int hashCode() {
        return (int) cedula.hashCode();
    }

    /** Se implementa el metodo equals() de esta forma */
    public boolean equals (Object obj){
        if (obj == this) return true;
        if (!(obj instanceof Persona)) return false;
        if (obj == null) return false;
        PersonaPk per = (PersonaPk) obj;
        return per.id == id && per.cedula.equals(cedula);
    }
}

Clase 2: Persona.class (Clase Entidad).

@Entity //Implementacion de la anotacion Entidad
@IdClass(value = PersonaPk.class) //Se define que es una llave primaria compuesta
//Implementa la clase Serializable
public class Persona  implements Serializable, Cloneable{
    /** @generated */
    private static final long serialVersionUID = 1L;

    /** Metodo constructor sin argumentos */
    public Persona() {
    }

    @Id // Se define que el atributo es una llave primaria de @IdClass
    /** metodo getteer del atributo llave primaria uno */
    public String getId() {
        return id;
    }

    /** Metodo setter del atributo llave primaria uno */
    public void setId(final String id) {
        this.id = id;
    }

    /** @generated */
    private String id = null;

    @Id // Se define que el atributo es una llave primaria de @IdClass
    /** metodo getteer del atributo llave primaria dos */
    public Long getCedula() {
        return cedula;
    }

    /** Metodo setter del atributo llave primaria dos */
    public void setCedula(final Long cedula) {
        this.cedula = cedula;
    }

    /** @generated */
    private Long cedula = null;
}

Ahora veremos utilizando el ejemplo anterior como se mapea este tipo de llave primaria compuesta en la base de datos. Esto lo podemos apreciar en la siguiente figura:

mapeoBD2.JPG

Como podemos ver en la figura anterior las dos filas que están seleccionadas y resaltadas de color azul no indica que esos dos campos “ID, CEDULA” son llaves primarias de la tabla “PERSONA”.

<< Anterior - Volver Menu JPA - Siguiente >>

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License