Uso de hibernate ctiteria Deseo seleccionar un objeto y está asociado oneToMany lista de objetos. Quiero paginar a través de esta lista para evitar la temida cuestión de selección hibernate n + 1Criterios de hibernación n + 1 problema con maxresults
Aquí hay una solución de trabajo que requiere 11 viajes a la base de datos para 10 objetos principales.
Criteria criteria = this.getSession().createCriteria(Mother.class);
criteria.addOrder(Order.asc("title"))
.setMaxResults(details.getMaxRows())
.setFirstResult(details.getStartResult())
.setFetchMode("kittens", FetchMode.SELECT);
List test = criteria.list();
Y he aquí una solución que ejecuta una sola instrucción SQL (hurra), pero no puede manejar la paginación es decir, los setMaxResults y setFirstResult son incorrectos en el objeto padre de la madre (Boo)
Criteria criteria = this.getSession().createCriteria(Mother.class);
criteria.addOrder(Order.asc("title"))
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.setMaxResults(details.getMaxRows())
.setFirstResult(details.getStartResult())
.setFetchMode("kittens", FetchMode.JOIN);
List test = criteria.list();
Esto parece como tales un requisito común, pero he buscado una solución sin suerte.
¿Alguno de los interesados?
Gran respuesta. Gracias y respeto – jaseFace
Ojalá pudiera votar esto más de una vez. Solución inteligente. – cdmckay
Gran andwer; en mi caso obtuve identificaciones repetidas debido a la unión de uno a muchos, así que reemplacé la proyección en la línea 5 con '.setProjection (Projections.distinct (Projections.id()))' –