使用HQL时“实体未映射”异常。适用于Criteria

时间:2010-09-10 11:25:01

标签: nhibernate

在谈论这个问题之前,有一些背景知识:

  1. 有3个组件。
    1. 一个包含实体类和问题HQL。
    2. 测试。
    3. 网站。
  2. 测试程序集中的所有测试都是为HQL传递的。
  3. 网站上会抛出异常。
  4. 如果我使用等效的Criteria代码,它在调用它的所有程序集中都可以正常工作。
  5. 解决问题。调用以下HQL时

    var commentCount = 
        session.CreateQuery("select e.CommentCount from Entity e where e.Id = :entityId")
        .SetParameter("entityId", string.Format("{0}:{1}", entityType, entityId))
        .UniqueResult<int>();
    

    抛出此异常:

    未映射实体[从实体e中选择e.CommentCount,其中e.Id =:entityId]

    如前所述,我可以改为使用Criteria,但我担心可能存在使用Criteria掩盖的潜在问题。

    有什么想法吗?感谢。

3 个答案:

答案 0 :(得分:2)

我忘了将程序集添加到我的hibernate配置中!

以下是代码:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory name="demo">
        <mapping assembly="Users" />
    </session-factory>
</hibernate-configuration>

我不确定为什么标准有效。我猜它与明确定义的类型有关。

答案 1 :(得分:0)

使用 C#自己的 as string

var commentCount =  session.CreateQuery("select e.CommentCount from Entity e where e.Id = :entityId and rownum <= 1")
                           .SetParameter("entityId", string.Format("{0}:{1}", entityType, entityId))
                           .UniqueResult() as string;

请注意,您可能必须在最后添加and rownum <= 1子句。

答案 2 :(得分:0)

auto-import="true"添加到您的hibernate-mapping元素中。这应该照顾它。