вставить в .. выберите в HQL вызывает MismatchedTreeNodeException - PullRequest
1 голос
/ 07 января 2011

Я пытаюсь сделать то, что кажется довольно простой вставкой в ​​... select с 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 (Currency, AcmeCorp.Core.Models.Products.Price, Value) выберите: destinationCurrency, pv.Price, pv.Value *: x от AcmeCorp.Core.Models.Products.PriceValue pv где pv.Currency =: defaultCurrency]

Один намек может быть на то, что он расширяет часть спецификации свойства (Price -> AcmeCorp.Core.Models.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>

Есть идеи?

1 Ответ

0 голосов
/ 13 января 2011

Я думаю, что: x вызывает исключение MismatchedTreeNodeException, я не думаю, что hql разрешит параметр в select. Попробуйте заменить его константой и посмотрите, поможет ли это.

...