2012-01-03 3 views
0

며칠 전에 질문을 던졌습니다. My previous question. 그래서 내 질문은 propery의 속성과 별개의 객체 목록에 따라 정렬하는 방법이었습니다. 그 당시 나는 QueryOver을 사용하여 이것을 달성하려했지만 Criterea API를 사용하고 있습니다. 그리고 저는 평등 한 기록을 다시 가지고 있습니다. 이것은 내 criterea입니다다른 클래스의 속성에 의한 Nhibernate 주문

var lst = 
    Session.CreateCriteria<News>().CreateAlias("Category", "c").AddOrder(Order.Asc("c.Name")). 
     SetFirstResult(pageSize * pageNumber).SetMaxResults(pageSize).List<News>(); 

Distinct 투영을 추가하려고하면 아무 것도 얻지 못합니다. 그냥 예외 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()를'제거)를 가져 오기 위해 관리나요? 분명히 이것은 전체 클래스가 아니며 다 대다 및 다 대일의 클래스 이름은 이상하게 보입니다. –

+0

CreateAlias ​​대신 CreateCriteria를 사용해 볼 수 있습니까? – ivowiblo

답변

관련 문제