2012-01-03 8 views
0

私は数日前にMy previous questionという質問をしました。だから私の質問は、どのようにプロパティのプロパティとオブジェクトの別のリストに順序を取得することでした。当時、私はQueryOverを使ってこれを達成しようとしていましたが、今はCriterea APIを使用しています。そして、私は再び平等な記録を持っています。これは私の基準です別のクラスのプロパティで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

答えて

関連する問題