Estoy usando EclipseLink como JPA proveedor.
Quiero hacer una consulta para obtener los me todos los nombres que corresponden a ciertas IDs
en línea con uno de los Criterios de la consulta.
Root<UserAccount> root = criteria.from(UserAccount.class);
List<Selection<?>> select = new ArrayList<Selection<?>>();
for (MyElement element : list) {
Expression<String> firstName = root.get("firstName");
Expression<String> lastName = root.get("lastName");
Expression<Integer> id = root.get("id");
select.add(criteria
.multiselect(
firstName.alias(element.getId() + "_"
+ element.getEntity() + "f"),
lastName.alias(element.getId() + "_"
+ element.getEntity() + "l"))
.where(criteriaBuilder.equal(id, element.getAuthorId()))
.from(UserAccount.class)
.alias(element.getId() + "_" + element.getEntity()));
}
criteria.multiselect(select);
TypedQuery<Tuple> q = em.createQuery(criteria);
for (Tuple t : q.getResultList()) {
for (OverviewEntity element : list) {
System.out.println("////"
+ t.get(element.getId().toString() + "_"+element.getEntity()+"f",
String.class));
Por element.getId() + "_" + element.getEntity() + "f"
tengo la intención de crear un alias.
El problema es que todo lo que veo es null
. Por qué? ¿Cómo debo obtener todos estos en una consulta(para que no se convertirá en un tiempo)?
- ¿Por qué quieres crear (único) alias? Lo del elemento.getEntity()?
- La idea es que cuando me dan los resultados,quiero saber donde hacer todos los resultados del ajuste. El
ID
no es suficiente, hay algunos más@Transient
(no en la base de datos) de información. - Este diseño parece mucho más complicado. Me gustaría escribir una simple consulta a devolver todos los UserAccount registros con un Id en el conjunto dado. El resultList se adjunta a PersistenceContext, y usted será capaz de obtener su Transitoria de la propiedad sin ningún esfuerzo…no hay necesidad de utilizar el alias
- Tienes razón, podría ser más fácil de conseguir y tener la lista, ordenar todos los problemas por la iteración a través de ella. Pero no se que hacer mi consulta más lento(debido a que tengo toda la entidad, y no sólo esos 3 campos)? Por favor enviar una respuesta, puedo aceptarlo.
Como se sugiere en los comentarios, me iría a por una solución más simple como
o el equivalente consulta mediante
CriteriaBuilder
y Metamodelo:La
resultList
devuelto contiene las instancias de entidad que se adjuntan a laPersistenceContext
. Esto significa que usted será capaz de obtener laTransient
propiedades sin esfuerzo.Relativas a las actuaciones, puede haber diferencias notables sólo en situaciones extremas, como cuando el tamaño de la lista devuelta es muy grande, o cuando usted tiene que repetir esta consulta, con una alta frecuencia. Pero esto requiere de un análisis profundo.
El código parece muy confuso y más complicado.
La JPQL
Parecería trabajo,
De criterios, esto es,
element
pueden ser de tipoA
o de tipo «B». Puedo saber de qué tipo es como este:element.getEntity()
. Cuando me dan los resultados, debo saber si la devuelvenid
y su correspondientefirstName
ylastName
pertenecen a unA
o a unB
. ESE es el problema, no solo para obtener las Cadenas de la base de datos.