0

に参加:NHibernateは - ミキシングサブクエリと熱心左は、このデータベースモデルを考えてみましょう

私の願いは、データベース、熱心な負荷彼らの支払いとも

addから(自分の名前で)すべての製品を照会することです

Product   Payment   Info   
-------   -------   -------- 
Id    Id    Id 
Name   Value   Year 
       Date   Description 
       ProductId  ProductId 

いくつかのパラメータによってInfoからの説明。 NHibernateは、クエリ(それはSQL、HQLでのかどうかに関係なく、基準を行うにはどのように

  1. :しかし、私は2つの大きな問題を持っている

    Select product.Id, product.Name, payment.Value, payment.Date, 
        (select inf.Description from Info inf 
        where inf.ProductId = product.Id where inf.Year = 2010 limit 1) as Description 
    from product left outer join payment on product.Id = payment.ProductId 
    where product.Name like ? 
    

    :(Postgre)SQLは、次のようになりますAPI、QueryOver、LINQなど)?

私はCategory.Descriptionを投影する必要があり、私はこの思い付いた疑い:

var subquery = DetachedCriteria.For<Info>("inf") 
    .Add(Restrictions.EqProperty("inf.Product.Id", "p.Id")) 
    .Add(Restrictions.Eq("Year", 2010)). 
.SetProjection(Projections.Property("inf.Description")); 

var criteria = session.CreateCriteria<Product>("p") 
    .Add(Restrictions.Eq("Product.Id", 12345678)) 
    .SetProjection(
     Projections.Property("p.Id"), 
     Projections.Property("p.Name"), 
     Projections.Property("p.Payments"), 
     Projections.Alias(Projections.SubQuery(subquery), "p.Description")); 

criteria.SetFetchMode("p.Payments", FetchMode.Eager); 

しかし、これは動作しません。サブクエリを作成するにはどうしたらよいですか?

  1. 結果セットからエンティティ(豆)を作成するにはどうすればよいですか?

    public class Product 
    { 
        public virtual int Id { get; set; } 
        public virtual string Name { get; set; } 
        public virtual string Description { get; set; } 
        public virtual IList<Payment> Payments { get; set; } 
    } 
    
    public class Payment 
    { 
        public virtual int Id { get; set; } 
        public virtual Product Product { get; set; } 
        public virtual double Value { get; set; } 
        public virtual DateTime Date { get; set; } 
    } 
    

    私は予測を使用しているように、これはAliasToBeanResultTransformerのためのケースのように見えます、しかし、私の左を認識していないようだ。私は結果から次のエンティティを作成したい

参加する(熱心にペイメントを積んだ)

お知らせください。

ありがとうございます!

あなたが記述の値を取得するためにNHibernateの式を使用することができます
+0

あなたはすでに働いてSQLクエリを持っており、それはSQL、HQLか何かだ場合、あなたは気にしないので、それ以外の場合は、あなたが持っているSQLクエリを使用してみませんか? –

+0

はい、そうですが、結果からエンティティを作成する必要があり、その操作方法がわかりません。 – user315648

答えて

関連する問題