使用HQL时出现“实体未映射”异常。与标准

问题描述:

这里谈论这个问题之前作品的一些背景:使用HQL时出现“实体未映射”异常。与标准

  1. 有3个组件。
    1. 一个包含实体类和问题HQL。
    2. 测试。
    3. 网站。
  2. 测试程序集中的所有测试都通过了HQL。
  3. 网站引发异常。
  4. 如果我使用等效的Criteria代码,它可以在所有调用它的程序集中正常工作。

解决问题。当调用以下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.Id =选择e.CommentCount:ENTITYID]

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

任何想法?谢谢。

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

下面的代码:

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

我不知道为什么标准工作。我猜测它与被明确定义的类型有关。

+0

你试过我的推荐吗?这对我来说总是有效的,我从我目前的生产代码中得到了它。 – rebelliard 2010-09-10 13:49:36

+0

Criteria返回未映射实体的空结果。这意味着它不工作,它只是没有投掷。 – 2010-09-14 12:45:28

+0

很高兴知道。我会在将来寻找这个。 – Castrohenge 2010-09-27 16:00:45

使用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条款。

+0

我不确定你的意思,我应该把“作为字符串”? “where e.Id =:entityId as string”和rownum Castrohenge 2010-09-10 12:38:19

+0

@Kieranmaine在我的修改中,请注意UniqueResult ()更改为UniqueResult()作为字符串。 – rebelliard 2010-09-10 13:18:46

+0

在没有您的改变的情况下工作。我认为不添加组件是更大的问题。谢谢您的帮助。 – Castrohenge 2010-09-10 14:11:18

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

+0

谢谢。我明天在工作上给了那个尝试。 – Castrohenge 2010-09-12 22:16:10

+0

这似乎不适用于我。 – Castrohenge 2010-09-14 12:07:17