2012-01-03 77 views
0

前几天我提了一个问题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,我如何能实现所需的功能? 而这是非常重要,我需要从基地获得不同的结果,而不是在客户端。

+0

你有没有设法获取自身的每个类(删除 'CreateAlias' 和 'AddOrder()')?显然,这不是你的全班同学,多对多和多对一的班级名称看起来很奇怪。 – 2012-01-03 19:37:09

+0

你可以尝试使用CreateCriteria而不是CreateAlias? – ivowiblo 2012-01-04 05:23:39

回答