Hibernate: сгенерированные свойства для отношений многие-к-одному? - PullRequest
0 голосов
/ 19 августа 2011

Я хочу настроить спящий объект для обработки внешних ключей, которые имеют значения по умолчанию на уровне базы данных.У меня есть объект User со столбцом emailFormat, который является ключом в таблице типов emailformat.В emailFormat таблицы User задано значение по умолчанию на уровне базы данных, а также ограничение not-null.

Мой файл гибернации:

<class
    name="User"
    table="USER"
>
...
  <many-to-one
       name="emailFormat"
       class="EmailFormat"
       not-null="true"
  >
  <column name="EMAILFORMATID" />
</many-to-one>

Я хотел бы создать новый объект User без настройки emailFormat и сделать так, чтобы Hibernate распознал, что это сгенерированное значение.Вместо этого Hibernate пытается вставить 'null' для этого значения, и вставка завершается неудачей.

ORA-01400: невозможно вставить NULL в ("EMAILFORMATID")

Документы для сгенерированных свойств, похоже,указать, что то, что я хочу, невозможно, потому что: 1.) похоже, что может быть сгенерировано только свойство, а не ключ для отношения многие-к-одному;и 2.) в документах говорится:

«Свойства, помеченные как сгенерированные, должны быть также не вставляемыми и не обновляемыми.»

Что не будет работать для меня, потому что пока БД генерируетзначения по умолчанию, мне нужно иногда иметь возможность изменять (переопределять) их.

Иногда я сталкивался с ошибками в документах или с недостатком документации, имеющим какой-то недокументированный или плохо документированный способ сделать что-то.Я искал в Интернете, не найдя ничего, но я надеюсь, что кто-то еще знает лучше.

Любой способ сделать то, что я хочу?

Ответы [ 2 ]

0 голосов
/ 19 августа 2011

Джоэл Худон: Это сработало бы, если бы спящий объект был единственным, кто когда-либо вставлял эти объекты в БД, но, к сожалению, это не так.Должен иметь дело с некоторыми устаревшими вещами, и, я думаю, застрял с настройками по умолчанию.Хотелось бы заставить Hibernate играть с ними.

Я могу переопределить все значения по умолчанию в коде и требовать, чтобы кто-либо создавал новый объект домена для установки этих значений по умолчанию (или делал это в конструкторе и т. Д.),но это будет означать дублирование логики того, что по умолчанию есть что - все, что сейчас находится в БД.Плюс, это дополнительная работа.Надеюсь Hibernate может просто играть красиво.Возможно, нет никакого способа сделать это.

0 голосов
/ 19 августа 2011

Вместо того, чтобы иметь значения по умолчанию на уровне базы данных, установите значение по умолчанию в конструкторе объекта домена (пользователь в вашем примере) для поля emailFormat.

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