Un ejemplo sería :

Invoice que tiene las propiedades Customer, Payment, Contact. Las tres son
LazyLoad y eso esta bien, pero para esa consulta que tenes que mostrar ese
dato calculado que depende de los tres, y ahi tenemos un problema.

Entonces como hacemos?

from Invoice i
inner join fetch i.Customer
inner join fetch i.Payment
inner join fetch i.Contact

3 inner join fetch es un poco mucho.... Pero.

Si en todo tu sistema, por todos lados tenes que mostrar esa propiedad
calculada, evaluaría hacerlo de otra forma. Pero vos dijiste que era para
mostrar en una grilla paginado solamente.

Saludos


El 14 de diciembre de 2009 11:15, Carlos Peix <[email protected]>escribió:

> Hola Juan,
>
> Por que 300 consultas a la base de datos? si tenes tres colecciones hijas
> deberias tener 3 consultas que devuelven 100 elementos cada una (a menos que
> me equivoque por mucho)
>
> La primera recomendacion seria no realizar optimizaciones (como la carga
> "eager" de las colecciones) hasta que no se compruebe que es necesario.
>
> Como siempre, NH no hace magia y si es necesario que tengas un cache de la
> suma en la entidad padre, pues tendras que hacerlo de la misma manera y
> persistirlo. Esta opcion deberias usarla en caso extremo ya que implica
> almacenamiento redundante de informacion, aunque con un buen diseño de los
> objetos, no deberia ser muy riesgoso.
>
> ----------------------------------
> Carlos Peix
>
> 2009/12/14 Juan Cuello <[email protected]>
>
> Muchas gracias a ambos. Lo de paginación lo tengo solucionado gracias
>> a vuestras instrucciones. Uso Oracle 10g.
>>
>> El problema de propiedades calculadas es que los programadores, para
>> obtener dicho valor, accedían a las subentidades (carga lazy)
>> provocando que, en una lista de 100 elementos, que se accede a 3
>> subentidades por elemento, hablamos de 300 consultas a base de
>> datos...malo malo.
>>
>> La idea era especificar la select de carga de dicha entidad haciendo
>> los joins que corresponden y mapeando esos valores, de forma que al
>> cargar la lista, directamente tendría los valores calculados en esas
>> propiedades y me ahorraba accesos a bbdd. Pondría estas propiedades en
>> insert="false" update="false" y listo...
>>
>> ¿Es buena idea hacerlo de esa forma? ¿Alguna idea mejor? ¿Tenéis algún
>> ejemplo de especificación de select para la carga de una entidad?
>>
>> Muchas gracias
>>
>> On 12 dic, 13:38, José F. Romaniello <[email protected]> wrote:
>> > Y otra cosa, en unhaddins hay algo:
>> http://code.google.com/p/unhaddins/source/browse/#svn/trunk/uNhAddIns...
>> >
>> > Aunque para mi, todo el problema el problema de Paginación/Sorting y
>> > Filtering, se puede resolver con dos funciones en un servicio de la
>> > siguiente forma:
>> >
>> > ICollection<TEntity> GetPage(int size, int pageNumber,
>> > Expression<Func<TEntity, bool>> predicate, params Func<TEntity,
>> object>[]
>> > order);
>> > int GetLastPageNumber(int size, Expression<Func<TEntity, bool>>
>> predicate);
>> >
>> > <
>> http://code.google.com/p/unhaddins/source/browse/#svn/trunk/uNhAddIns..
>> .>Y
>> > son dos funciones diferentes por que GetLastPageNumber, se llama
>> unicamente
>> > cuuando cambia el predicado. Eso da la libertad de en el presenter hacer
>> > cualquier cosa.
>>
>> --
>> Para escribir al Grupo, hágalo a esta dirección:
>> [email protected]
>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>>
>
>  --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a