в спячке избегайте идентификатора - PullRequest
1 голос
/ 20 сентября 2011

Я впервые использую hibernate, так что извините, если я собираюсь попросить легкого совета.В настоящее время я сопоставляю класс с использованием xml (без аннотаций), у меня нет идентификатора в таблице, но кто-то сказал мне, что я вынужден использовать идентификатор с помощью hibernate, поэтому я создал поле SMS_MONITORING_ID втаблица, и я сопоставляю ее следующим образом:

 <class name="smsbox.dal.model.SmsMonitoring" table="MST_SMS_MONITORING">
    <comment></comment>

    <id name="smsMonitoringId" type="long">
        <column name="SMS_MONITORING_ID" />
        <generator class="native" >
            <param name="sequence">ID_SMS_MONITORING</param>
        </generator>

    </id>

Я уже сделал последовательность в своей базе данных Oracle (ID_SMS_MONITORING), и я не хочу, чтобы этот hibernate обрабатывал идентификатор вообще, я бы дажехотел бы избежать любой ссылки на идентификатор в моем коде Java (когда я сохраняю объект).Как я мог выполнить свое желание позволить hibernate игнорировать весь процесс при назначении идентификатора?

PS Я отображаю идентификатор (long) в тип Oracle "Number", каково правило, чтобы избежать возможных проблем(долго не вписывается в число или наоборот) кто-нибудь может дать мне какую-нибудь ссылку, которая хорошо объясняет типы отображения Hibernate и Oracle DB (я не нашел ничего интересного самостоятельно).Спасибо

Ответы [ 3 ]

1 голос
/ 20 сентября 2011

К сожалению, каждый сопоставленный объект должен иметь сопоставленный идентификатор, как того требует каждая реляционная база данных.

Идентификатор назначается объекту только тогда, когда вы сохраняете свой объект, поэтому вам нужно использовать свою последовательность в Hibernate. Более того, вам нужно создать функции равенства и хэш-кода с большим количеством параметров, чем ID, потому что, если у вас есть два объекта и их идентификаторы равны нулю, а ваши функции равенства и хэш-кода используют только идентификатор, оба объекта в Hibernate равны и могут быть Основная причина многих проблем в вашем коде.

1 голос
/ 20 сентября 2011

Если вы обратитесь к документации Hibernate:

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-id

, вы увидите, что тег является необязательным.Оставив его неопределенным, эквивалентно установить его как «назначенный» (другими словами, ваше приложение будет обрабатывать присвоение идентификатора).

0 голосов
/ 20 сентября 2011

Вы можете попытаться объявить генератор идентификаторов следующим образом

 <generator class="sequence">
        <param name="sequence">YourSquenceName</param>
      </generator>

когда вы сохраняете свой объект с помощью hibernate, вам не нужно получать / устанавливать Id, и просто оставить поле id равным нулю, Hibernate получит действительный идентификатор из вашей последовательности.

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