¿cómo puedo mapear una relación de uno a muchos en Hibernate donde los muchos lados deben ser paginados? (es decir, tiene cientos o más objetos relacionados)
El uso de la anotación OneToMany (o su equivalente xml) no es útil porque al cargar el objeto de un solo lado recupera todos sus objetos relacionados causando un desastre de memoria (aunque use perezoso cargando).
Un posible enfoque (que ya estoy usando) es agregar un método getter en una implementación DAO, donde puede introducir parámetros de paginación. Sin embargo, puedo ver que esto no es ideal porque se pierden algunas características como la conexión en cascada (por ejemplo, tengo que incluir métodos setter en la clase DAO para asociar objetos). Además, pierde algún sentido OOP ya que el objeto de un lado no tiene un método para recuperar sus objetos relacionados de muchos lados. ¿Cuál es la mejor solución?
Para ilustrar más mi punto, digamos que tengo dos clases con la siguiente relación entre ellas: A has-many B.
No puedo escribir un método A.getAllB() usando una anotación de OneToMany, ya que hay cientos de Bs relacionado con un A. Por lo tanto, para paginar los resultados, creo una clase ADaoImpl separada con un método getAllB() donde puedo incluir paginación params para devolver solo una página de datos a la vez. ¿Es esto correcto? Cualquier ayuda será apreciada.Hibernate paginated OneToMany relación
5
A
Respuesta
2
Creo que haría lo mismo que está proponiendo: crear un nuevo método en mi dao que tome los parámetros de paginación y devuelva la página de resultados especificada. Si usted quiere o no mantener a los niños en su objeto primario depende de usted. Puede crear un campo transitorio para esos objetos.
public class Parent {
@Transient
private List<Child> children;
}
public class ParentDao {
// Solution 1 - You can keep the parent/child association
public void loadChildren(Parent parent, int firstResult, int maxResults) {
// do your query
parent.setChildren(query.list());
}
// Solution 2 - Or just have your dao directly return the children and remove the list from Parent
public List<Children> getChildren(Parent parent, int firstResult, int maxResults) {
// do your query
return query.list();
}
}
Sé lo que quieres decir con romper la sensación de OO del código. Pero realmente la paginación es una función de la capa de datos. Ir con la primera solución puede restaurar algo de esa agradable sensación de "OO".
Cuestiones relacionadas
- 1. Hibernate @OneToMany y la restricción ÚNICA
- 2. Hibernate inserta duplicados en una colección @OneToMany
- 3. Hibernate no elimina los huérfanos en OneToMany
- 4. Hibernate @OneToMany con mappedBy (padre-hijo) relación y problema de caché
- 5. Hibernate - HQL en busca de una colección de la relación unidireccional OneToMany
- 6. JPA no guarda clave externa en @OneToMany relación
- 7. Hibernate @ManyToMany eliminar relación
- 8. Hibernate JPA - Relación ManyToOne no poblada
- 9. Cuándo usar inverse = false en NHibernate/Hibernate OneToMany relationships?
- 10. Spring MVC con Hibernate - mapeo OneToMany en forma
- 11. FluentNHibernate: relación Automapping OneToMany utilizando atributos y convenciones
- 12. doctrine2 La relación OneToMany inserta NULL como la clave externa
- 13. Django: Limitar el número de relaciones en una relación OnetoMany
- 14. Hibernate @OneToMany sin unirse a una tabla separada
- 15. Hibernate (JPA) múltiple @OneToMany para el mismo modelo
- 16. Por qué @OneToMany no funciona con herencia en Hibernate
- 17. entidad insertable con @OneToMany atributo
- 18. Django OneToMany
- 19. ¿Qué significa un propietario de relación en Hibernate?
- 20. Relación JPA Hibernate uno a uno
- 21. Hibernate - Una relación entre muchas y orphanRemoval cascade
- 22. Modelando una relación de dos a muchas en JPA/Hibernate
- 23. JPA - @OneToMany actualización
- 24. JPA CriteriaQuery OneToMany
- 25. ¿Cómo encuentra Hibernate el tipo genérico de una colección en un mapeo @OneToMany?
- 26. @OneToMany y teclas primarias compuestas?
- 27. OneToMany/ManyToOne SchemaException
- 28. JPA OneToMany, siempre vacío
- 29. ¿Qué significa el propietario de la relación en una relación bidireccional?
- 30. relación ManyToMany Consulta con los Criterios de Hibernate