NHibernate Changes 1.0.2 (APR 13)
With the changes shown below I could make this syntax (not using SubOrder but still good enough...) to work:
Session.CreateCriteria(typeof(Products));
_criteria.CreateCriteria("Suppliers", "SPP");
_criteria.AddOrder("SPP.CompanyName", true);
Order.cs
Code:
/// <summary>
/// Render the SQL fragment
///
/// STA 13-4-2006 : Added new Parameter (aliasClasses) + use it.
/// </summary>
/// <param name="sessionFactory"></param>
/// <param name="persistentClass"></param>
/// <param name="alias"></param>
/// <returns></returns>
//public string ToSqlString( ISessionFactoryImplementor sessionFactory, System.Type persistentClass, string alias )
public string ToSqlString( ISessionFactoryImplementor sessionFactory, System.Type persistentClass, string alias , IDictionary aliasClasses)
{
//string[ ] columns = AbstractCriterion.GetColumns( sessionFactory, persistentClass, _propertyName, alias, emptyMap );
string[] columns = AbstractCriterion.GetColumns(sessionFactory, persistentClass, _propertyName, alias, aliasClasses);
if (columns.Length != 1)
{
throw new HibernateException( "Cannot order by multi-column property: " + _propertyName );
}
return columns[ 0 ] + ( _ascending ? " asc" : " desc" );
}
CriteriaLoader.csCode:
foreach( Order ord in criteria.IterateOrderings() )
{
if( foundOrder )
{
orderBy.Append( StringHelper.CommaSpace );
}
// STA 13-4-2006 : Modified
//orderBy.Append( ord.ToSqlString( factory, criteria.CriteriaClass, Alias ) );
orderBy.Append(ord.ToSqlString(factory, criteria.CriteriaClass, Alias, criteria.AliasClasses ));
foundOrder = true;
}