====== @NamedQuery y Organización ====== JPA //NamedQueries// es una de las características más utilizadas de JPA ya que nos permite diseñar las consultas en las propias entidades y tenerlas muy a mano. Sin embargo según va creciendo el proyecto podemos tener algunos problemas. Vamos a mostrar un posible bloque de código: package com.arquitecturajava; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; @Entity @NamedQueries({ @NamedQuery(name="seleccionarAlumnosNombre", query="select a from Alumno a where a.nombre=:nombre"), @NamedQuery(name="seleccionarAlumnosApellidos", query="select a from Alumno a where a.apellidos=:apellidos") }) public class Alumno implements Serializable{ private static final long serialVersionUID = 1L; @Id private String dni; private String nombre; private String apellidos; private int edad; public Alumno() { super(); } public Alumno(String dni, String nombre, String apellidos, int edad) { super(); this.dni = dni; this.nombre = nombre; this.apellidos = apellidos; this.edad = edad; } // getters/setters public String getDni() { return dni; } public void setDni(String dni) { this.dni = dni; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getApellidos() { return apellidos; } public void setApellidos(String apellidos) { this.apellidos = apellidos; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } } Se trata de una entidad muy sencilla que contiene el concepto de Alumno y dos //NamedQueries// (seleccionarAlumnosNombre, seleccionarAlumnosApellidos). Las consultas funcionarán sin problemas. Ahora bien :¿Qué pasará cuando tengamos más clases y más consultas?. Para tener una mejor organización, lo haremos utilizando constantes: package com.arquitecturajava; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; @Entity @NamedQueries({ @NamedQuery(name=Alumno.SELECCIONAR_ALUMNOS_POR_NOMBRE, query="select a from Alumno a where a.nombre=:nombre"), @NamedQuery(name=Alumno.SELECCIONAR_ALUMNOS_POR_APELLIDOS, query="select a from Alumno a where a.apellidos=:apellidos") }) public class Alumno implements Serializable{ private static final long serialVersionUID = 1L; public static final String SELECCIONAR_ALUMNOS_POR_NOMBRE = "Alumno.seleccionarAlumnosNombre"; public static final String SELECCIONAR_ALUMNOS_POR_APELLIDOS = "Alumno.seleccionarAlumnosApellidos"; @Id private String dni; private String nombre; private String apellidos; private int edad; public Alumno() { super(); } public Alumno(String dni, String nombre, String apellidos, int edad) { super(); this.dni = dni; this.nombre = nombre; this.apellidos = apellidos; this.edad = edad; } // getters/setters ... } Ahora tenemos las constantes //SELECCIONAR_ALUMNOS_POR_NOMBRE// y //SELECCIONAR_ALUMNOS_POR_APELLIDOS// que podemos utilizar en los DAS a la hora de utilizar estas consultas nombradas. ---- --- //[[juanmiguel.bernal@ticarum.es|JUAN MIGUEL BERNAL GONZALEZ]] 05/10/2017 08:38//