typedquery query ejemplo java jpa criteria-api

java - ejemplo - typedquery



¿Qué significa un guión bajo concatenado a un nombre de clase? (2)

Estaba leyendo el artículo "Consultas dinámicas y seguras en JPA 2.0" y me topé con este ejemplo:

EntityManager em = ... CriteriaBuilder qb = em.getCriteriaBuilder(); CriteriaQuery<Person> c = qb.createQuery(Person.class); Root<Person> p = c.from(Person.class); Predicate condition = qb.gt(p.get(Person_.age), 20); // ^^ --- this one c.where(condition); TypedQuery<Person> q = em.createQuery(c); List<Person> result = q.getResultList();

Me preguntaba, ¿qué significa exactamente el subrayado aquí?

Dado que un guión bajo es una parte válida de un nombre de clase, no entiendo por qué se puede usar en JPA. Verifiqué esto con una entidad existente en mi código y, por supuesto, mi clase no se pudo resolver como ClassName_


Encontré esta manera de declarar el metamodelo en este article .

/** * A meta model class used to create type safe queries from person * information. * @author Petri Kainulainen */ @StaticMetamodel(Person.class) public class Person_ { public static volatile SingularAttribute<Person, String> lastName; }


Ese es el metamodel para la persistencia. Es cómo puedes hacer consultas seguras de tipo JPA en Java. Permite que las consultas verifiquen sus consultas de forma Bar_ porque la clase Bar_ describe su Bar JPA. En HQL, puede confundir fácilmente una consulta y no conocerla hasta que se ejecute.

Así que técnicamente, _ no significa nada, pero es la convención utilizada por JPA para nombrar una clase de metamodelo de una clase de modelo persistente JPA. Model_ es el metamodelo de Model y proporciona los nombres de los campos consultables y sus tipos.