【问题标题】:NHibernate - CreateSQLQuery exception "No persister for ..", why?NHibernate - CreateSQLQuery 异常“没有 .. 的持久性”,为什么?
【发布时间】:2011-10-10 10:38:38
【问题描述】:

我正在尝试使用 CreateSQLQuery 在 NHibernate 中创建 SQL 查询:

var query = session.CreateSQLQuery(
    "select loss.id as loss.Id, loss.start_date as loss.Date, " + 
    "       (select ... limit 1) as loss.Reserve, " +
    "       (select sum(m.val) ...) as loss.Payment " +
    "from LossData loss .. where ...";

// Commenting or uncommenting these doesn't have any effect either
query.AddScalar("Id", NHibernateUtil.Int32);
query.AddScalar("Date", NHibernateUtil.DateTime);
query.AddScalar("Reserve", NHibernateUtil.Double);
query.AddScalar("Payment", NHibernateUtil.Double);

query.AddEntity("loss", typeof(LossQueryDto));
query.SetResultTransformer(Transformers.AliasToBean(typeof(LossQueryDto)));

var list = query.List<LossQueryDto>();

但它给了我一个错误“没有持久性:'LossQueryDto'”。这个查询有什么问题? 我需要额外的查询映射吗?如果是这样,我可以在 Fluent Nhibernate 中定义一个吗?我正在使用 NHibernate 3.1。

Dto 本身是这样的:

public class LossQueryDto
{
    public virtual int Id { get; set; }
    public virtual DateTime Date { get; set; }
    public virtual double Reserve { get; set; }
    public virtual double Payment { get; set; }
}

谢谢!

【问题讨论】:

  • 我们能看到映射吗?
  • 什么映射?我没有“LossQueryDto”的任何映射。据我了解,如果使用 CreateSQLQuery(不进行命名查询时),则不需要映射。如果我需要创建一个映射,那么我该怎么做以及如何调用查询?

标签: hibernate nhibernate fluent-nhibernate nhibernate-mapping


【解决方案1】:

您查询的不是实体,而是 DTO,因此您可以删除以下内容:

query.AddEntity("loss", typeof(LossQueryDto));

【讨论】:

  • 原来我确实需要 dto 的映射。由于您是唯一的回答者,因此我接受您的回答,尽管它并不完全相关。
猜你喜欢
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
相关资源
最近更新 更多