2009-10-19 63 views
1

我有一组表,每个表有一个.hbm.xml。使用CreateQuery时出现'未映射'错误的故障排除

我试图把一个命名的查询,但它不会编译。我将代码移至CreateQuery并获取。

DB_Portfolio未映射[选择 总和从 DB_Portfolio P(p.Shares * s.Price),DB_Securities小号 其中p.AccountNumber = :使用accountNumber和p.CUSIP = s.Cusip]

CreateQuery语句看起来像。

IQuery queryBack = session.CreateQuery("select sum(p.Shares * s.Price) from DB_Portfolio p, DB_Securities s where p.AccountNumber = :accountNumber and p.CUSIP = s.Cusip"); 

queryBack.SetString("accountNumber", accountNumber); 


    return queryBack.UniqueResult<Decimal>(); 

我在DB_Portfolio的.hbm.xml

<many-to-one name="Security" class="BDM_Controller.Source.ORM.DB_Securities, BDM_Controller" column="Cusip"/> 

与Portofoio与CUSIP安全的外键。

我在这里错过了什么?

Visual Studio 2008中,NHibernate的2.1.0.4000,MS SqlServer的2005

回答

3

它在我看来,DB_Portfolio是您的数据库表名称,而不是类名称。在你的HQL查询中,你应该使用类名而不是数据库表名。

如果“DB_Portfolio”实际上您的classname:是您的.hbm.xml文件设置为“embedded resource”的构建操作? (如果不是这样,请做)。

这是一个猜测,因为您没有发布DB_Portfolio映射文件。如果您想要更复杂的答案,请发布完整的映射文件和类定义。

+0

击中头部的指甲。我经常忽略的一个步骤是嵌入资源设置。不过,我似乎还有其他问题。当我在属性窗口中的所有选定文件中打开Visual Studio 2008中的网站时,我只能看到只给出完整名称和完整路径选项的misc类别。对于网站中的所有aspx和vb页面也是如此。什么可能导致这种情况发生? 该表是Accounts,该类确实是DB_Accounts,我喜欢将这些名称分开,以便知道您处理的是哪一个。 感谢您的帮助。 --- John Putnam – 2009-12-10 15:15:02

0

我没有计算在Hibernate映射文件列。参见公式在下面的例子:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="MyModule.DisciplineDTO, MyModule" table="Disciplines"> 
    <id name="Id" column="DisciplineID" length="15"> 
     <generator class="assigned"/> 
    </id> 
    <property name="Preference" formula="'TM.D.'+DisciplineID" update="false" insert="false"/> 
    </class> 
</hibernate-mapping> 

的更新和插入属性告诉的nHibernate此列不构建更新时要使用的,并且如果该对象被写入到数据库中插入语句。 您应该指定列的数据类型。

+0

看起来不错。但在这个例子中,它是将两个表连接在一起并从两者中获取值的查询。一个查询应该可以工作,但我不明白为什么它认为投资组合表没有被映射。 – 2009-10-19 17:19:22

+0

你能分享你的映射文件吗?你检查了显而易见的东西吗?将映射文件上的属性设置为嵌入?将映射包含在正确的程序集中?将程序集添加到nhibernate帮助程序类,以便它知道从哪里加载它? – Jay 2009-10-20 02:05:20