クラス Product があるとします。
public class Product
{
public virtual string Name { get; set; }
public virtual IList<Order> Orders { get; set; }
}
およびクラスの順序:
public class Order
{
public virtual float Amount { get; set; }
public virtual DateTime Created { get; set; }
}
次のように (Fluent NHibernate を使用して) マッピングされているとします。
public class ProductMap : ClassMap<Product>
{
public ProductMap()
{
Map(x => x.Name);
HasMany(x => x.Orders).OrderBy("created desc");
}
}
public class OrderMap: ClassMap<Order>
{
public OrderMap()
{
Map(x => x.Amount);
Map(x => x.Created);
}
}
HQL ステートメントの最後の(マップされた句のため、最初の)Name
のProduct
と同様に を取得したい場合、どうすればよいでしょうか? このようなもの(説明目的):Amount
Order
OrderBy
select p.Name, p.Orders[0].Amount from Product p
私はこれについて多くのバリエーションを試みましたが、それぞれに独自のエラーがあります。
// Throws 'Property index does not exist in collection'
select p.Name, order.Amount from Product p join p.Orders as order where index(order) = 0
// Throws 'Antlr.Runtime.MismatchedTreeNodeException' on the brackets in p.Orders[0].
select p.Name, p.Orders[0] from Product P
// Throws 'Object reference not set to an instance of an object'
select p.Name, p.Orders[0].Amount from Product p
// Works fine, but not what I want
select p.name, order.Amount from Product p join p.Orders as order
この例では、 を使用しても問題は解決できSetMaxResults()
ましたが、実際には、クエリははるかに複雑で、多くの行を返すため、これはうまくいきません。
ここで初歩的なことが足りないような気がするので、助けていただければ幸いです。
使用: NHibernate 2.1.2.4000 および Fluent NHibernate 1.1.0.695