前几天我提了一个问题My previous question。所以我的问题是如何通过属性的一个propery和明确的对象列表来排序。当时我试图通过使用QueryOver
来实现这一点,但现在我正在使用Criterea API。我又有同样的记录。这是我的critereaNhibernate order by property of other class
var lst =
Session.CreateCriteria<News>().CreateAlias("Category", "c").AddOrder(Order.Asc("c.Name")).
SetFirstResult(pageSize * pageNumber).SetMaxResults(pageSize).List<News>();
如果我想添加独特的投影,我什么也没有得到。只是例外Unable to perform find[SQL: SQL not available]
。
var lst =
Session.CreateCriteria<News>().SetProjection(Projections.Distinct(Projections.Id())).CreateAlias("Category", "c").AddOrder(Order.Asc("c.Name")).
SetFirstResult(pageSize * pageNumber).SetMaxResults(pageSize).List<News>();
类
public class News
{
public virtual int Id { get; protected set; }
public virtual string Topic { get; set; }
public virtual Category Category { get; set; }
}
public class Category
{
public virtual int Id { get; protected set; }
public virtual string Name { get; set; }
public virtual ISet<News> News { get; set; }
}
和映射
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="News" namespace="NewsManagement.Models">
<class name="News" table="News">
<id name="Id">
<generator class="native" />
</id>
<property name="Date" not-null="true" />
<many-to-one name="Category" fetch="join" column="CategoryId" class="Category, NHibernateManyToOne" not-null="true"/>
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="News" namespace="NewsManagement.Models">
<class name="Category" table="Categories">
<id name="Id" column="Id">
<generator class="native" />
</id>
<set name="News" fetch="join" cascade="all-delete-orphan">
<key column="CategoryId" />
<one-to-many class="News, NHibernateOneToMany" />
</set>
</class>
</hibernate-mapping>
如果没有办法得到我需要criterea API,我如何能实现所需的功能? 而这是非常重要,我需要从基地获得不同的结果,而不是在客户端。
你有没有设法获取自身的每个类(删除 'CreateAlias' 和 'AddOrder()')?显然,这不是你的全班同学,多对多和多对一的班级名称看起来很奇怪。 – 2012-01-03 19:37:09
你可以尝试使用CreateCriteria而不是CreateAlias? – ivowiblo 2012-01-04 05:23:39