我正在尝试使用HQL进行看起来非常简单的插入..但是我被MismatchedTreeNodeException难倒。据我所知,我是世界上第一个遇到这种情况的人,我认为这表明我做的事非常愚蠢:)。
session.CreateQuery(
@"insert into PriceValue (Currency, Price, Value)
select :destinationCurrency, p, pv.Value * :x
from PriceValue pv
where pv.Currency = :defaultCurrency" )
.SetDecimal( "x", x )
.SetEntity( "destinationCurrency", currency )
.SetEntity( "defaultCurrency", Config.DefaultCurrency )
.ExecuteUpdate();
此练习的目的是将新创建的货币的价格值添加到所有现有价格中。
例外是:
QuerySyntaxException:抛出了类型为“Antlr.Runtime.MismatchedTreeNodeException”的异常。第1行第63列附近[插入PriceValue(货币,AcmeCorp.Core.Models.Products.Price,Value) select:destinationCurrency,pv.Price,pv.Value *:x 来自AcmeCorp.Core.Models.Products.PriceValue pv 其中pv.Currency =:defaultCurrency]
一个提示可能是它扩展了属性规范的一部分(Price - > AcmeCorp.Core.Models.Products.Price) - 异常消息似乎表明..Products.Price附近有问题。
(修剪)映射(由Castle ActiveRecord生成)是:
<class name="AcmeCorp.Core.Models.Products.Price, AcmeCorp.Core.Models" table="`price`" schema="`products`">
<id name="Id" access="property" column="`price_id`" type="Int32" unsaved-value="0">
<generator class="native"></generator>
</id>
<set name="Values" access="nosetter.camelcase" table="`price_value`" lazy="false" inverse="true" cascade="all" fetch="join" batch-size="1000">
<key column="`price_id`" />
<one-to-many class="AcmeCorp.Core.Models.Products.PriceValue, AcmeCorp.Core.Models" />
</set>
</class>
<class name="AcmeCorp.Core.Models.Products.PriceValue, AcmeCorp.Core.Models" table="`price_value`" schema="`products`">
<id name="Id" access="property" column="`price_value_id`" type="Int32" unsaved-value="0">
<generator class="native"></generator>
</id>
<property name="Value" access="property" type="System.Decimal">
<column name="`value`"/>
</property>
<many-to-one name="Currency" access="property" class="AcmeCorp.Core.Models.Common.Currency, AcmeCorp.Core.Models" column="`currency_code`" unique-key="uk_price_currency" lazy="proxy" />
<many-to-one name="Price" access="property" class="AcmeCorp.Core.Models.Products.Price, AcmeCorp.Core.Models" column="`price_id`" unique-key="uk_price_currency" lazy="proxy" />
</class>
有什么想法吗?
答案 0 :(得分:0)
我认为:x导致不匹配的TreeNodeException,我不认为hql会在select中允许一个param。尝试用常量替换它,看看是否有帮助。