Что делает hibernate с генератором class = "native" на oracle db? - PullRequest
3 голосов
/ 26 августа 2011

У меня есть это отображение в моем коде:

News.hbm.xml:
<class name="xyz.News" table="XYZ_NEWS">
        <id name="id" column="NEWS_ID">
            <generator class="native"/>
        </id>
rest of mapping
</class>

Я использую базу данных Oracle. Документация Hibernate говорит мне:

native - выбирает идентификатор, последовательность или hilo в зависимости от возможностей базовой базы данных

Что это значит для Oracle?

Изменить: Теперь я знаю, что он использует последовательности. Меня интересует название последовательности.

Ответы [ 2 ]

7 голосов
/ 26 августа 2011

Требуется последовательность. Вам необходимо указать имя последовательности.
Редактировать : Если имя не указано, будет использоваться последовательность с именем HIBERNATE_SEQUENCE .

Глядя на код, он позволяет решать диалект. Диалект реализует решение так:

// Dialect.cs Line 231
public virtual System.Type NativeIdentifierGeneratorClass
{
    get
    {
        if (SupportsIdentityColumns)
        {
            return typeof(IdentityGenerator);
        }
        else if (SupportsSequences)
        {
            return typeof(SequenceGenerator);
        }
        else
        {
            return typeof(TableHiLoGenerator);
        }
    }
}

Это не отменяется Oracle. Oracle не поддерживает идентичность, но последовательности.

1 голос
/ 26 августа 2011

Все довольно просто: ваш генератор будет использовать столбцы идентификаторов или последовательностей в соответствии с тем, что поддерживает ваша текущая база данных:

Например, в Oracle есть последовательности, а в предыдущих версиях сервера MS SQL этого нет.

Подробнее о различиях между идентичностями и последовательностями вы можете прочитать в этой статье: http://sqlserver -training.com / что-это-разностной промежуточности идентичности, и последовательности / -

Собственный генератор всегда возвращает длинные, короткие или целые значения:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...