假设我有一个类产品:
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
aProduct
和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