我有一组表,每个表都有一个.hbm.xml。
我试图输入一个命名查询,但它不会编译。我将代码移动到CreateQuery并获取。
未映射DB_Portfolio [select 总和(p.Shares * s.Price)来自 DB_Portfolio p,DB_Securities s 其中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
答案 0 :(得分:3)
在我看来,DB_Portfolio是您的数据库表名,而不是类名。在HQL查询中,您应该使用类名而不是数据库表名。
如果“DB_Portfolio”实际是您的类名:是.hbm.xml文件的构建操作设置为“嵌入资源”吗? (如果不是,请这样做。)
这是猜测,因为您没有发布DB_Portfolio映射文件。如果您想要更复杂的答案,请发布完整的映射文件和类定义。
答案 1 :(得分: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如果将此对象写入数据库,则在构造update和insert语句时不使用此列。 您还应该指定列的数据类型。