Hi, hoy tuve que cambiar una consulta que estaba en criteria escrita por un programador que trabajo conmigo. Como aca se han dado varias veces que gente habla de usar mas bien criteria por alguna razon, es un buen examen para la vista decidir que es mejor.
Las 2 razones por las que la cambie:
1) La consulta no es dinamica o sea que no obtengo ningun beneficio por armar un criteria
2) La consulta en criteria es dificil de entender
3) En tiempo de ejecucion NHibernate me va a decir si por ejemplo bag.NextAction no existe. El criteria solo fallara al llegar al test o al llegar en ejecucion a la consulta especifica.
Aca va la consulta en criteria (usando Or que no estoy seguro que estuviera en NH 1.2.1, alla era mas feo todavia Disjunction)
Expression.Eq(Bag.Properties.Workstation, workstation),
Expression.IsNotNull(Bag.Properties.NextAction),
Expression.IsNull(Bag.Properties.PreviousAction),
Expression.Or
(Expression.Eq(Bag.Properties.RiskLevel, nonSelecteeRiskLevel),
(Expression.IsNull(Bag.Properties.RiskLevel)))
y aca en HQL
from Bag bag
where bag.Workstation = :workstation
and bag.NextAction is not null
and bag.PreviousAction is null
and (bag.RiskLevel is null or bag.RiskLevel = :risklevel)
Bueno, no se que opinan ustedes...para mi en este caso Criteria es una demostracion de cuan poco flexible es la sintaxis de C# para escribir algo sencillo.
Gustavo.