Как генерировать идентификаторы с помощью NHibernate и Firebird? - PullRequest
1 голос
/ 06 января 2009

Я пытаюсь вставить несколько новых объектов в базу данных Firebird с помощью NHibernate.

Я получаю ошибку "не удалось получить следующее значение последовательности [SQL: SQL недоступен]"

Вот отображение, которое я использую в настоящее время. Примечание. ANML_EVNT - это имя генератора, который я хочу использовать.

    <id name="Id" column="ID" type="integer">
        <generator class="sequence">
            <param name="sequence">ANML_EVNT></param>   
        </generator>


    </id>

Ответы [ 2 ]

4 голосов
/ 13 января 2009

Если вы все еще ищете ответ, вот как я успешно его использовал.

Я использую «собственный» генератор, потому что при добавлении поддержки SQL Server в нашу программу единственное, что мне пришлось изменить в NHibernate, - это типы генераторов на «родные», потому что Firebird и SQL Server реализуют свои столбцы с «автоматически увеличивающейся идентичностью» по-другому. В Firebird он использовал именованный генератор, а в SQL Server он игнорирует параметр «sequence» и использует встроенное автоматическое приращение.

Вот пример того, о чем я говорю:

<id name="Id" column="ID">
   <generator class="native">
      <param name="sequence">ANML_EVNT</param>
   </generator>
</id>

С учетом всего вышесказанного, как ответил gcores, все, что кажется неправильным в вашей конфигурации, это дополнительные ">" после ANML_EVNT.

2 голосов
/ 06 января 2009

Это выглядит хорошо. Проблема не в конце скобки после ANML_EVNT, верно?

 <id name="Id" column="ID" type="integer">
      <generator class="sequence">
          <param name="sequence">ANML_EVNT</param>       
      </generator>


</id>
...