Hibernate сопоставление составного ключа с нулевыми значениями - PullRequest
18 голосов
/ 16 сентября 2008

С помощью Hibernate вы можете создать составной идентификатор, в котором один из столбцов, которые вы отображаете, может иметь нулевые значения?

Это относится к устаревшей таблице с уникальным ключом, который может иметь нулевые значения, но без первичного ключа.

Я понимаю, что могу просто добавить новый столбец первичного ключа в таблицу, но мне интересно, есть ли способ избежать этого.

Ответы [ 6 ]

10 голосов
/ 16 сентября 2008

Нет. Первичные ключи не могут быть нулевыми.

0 голосов
/ 15 февраля 2017

К сожалению, нет. Я либо должен был использовать обходной путь:

Я использовал составной идентификатор для представления (! Не таблицы), где строки могут быть точно определены по 2 столбцам (A, B). Хотя один из столбцов (B) может иметь как нулевые значения, так и целые положительные числа. Таким образом, мой обходной путь заключается в том, что я создал новый столбец в представлении: «BKey», и мое представление записывается так, как будто B равно нулю, тогда значение BKey равно -1, иначе BKey = B. Я также изменил мою реализацию composit id, чтобы использовать BKey вместо B. Надеюсь, это кому-нибудь поможет ...

0 голосов
/ 15 апреля 2016

Вы не получите ошибку, но Hibernate не сможет отобразить эти строки со значением NULL для составного столбца в вашу сущность. Это означает, что в результате вы получите сущность со значениями NULL.

0 голосов
/ 16 сентября 2008

Для составных ключей (предполагается, что база данных допускает нулевые значения в PK) вы можете иметь максимальное количество_с_от_ ^ 2 - 1 записей, содержащих нулевые значения (например, для составного ключа из 2 столбцов вы можете иметь 3 строки, имеющие в своем первичном ключе ноль, четвертый - это ПК без нулей).

0 голосов
/ 16 сентября 2008

Это не рекомендуется. Не могли бы вы использовать вид и карту вместо этого? Вы можете использовать COALESCE для предоставления значения по умолчанию, если вы застряли с устаревшими данными. У нас было много проблем с составными ключами, и я думаю, что нулевые значения вызовут еще больше проблем.

0 голосов
/ 16 сентября 2008

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

РЕДАКТИРОВАТЬ: Hibernate не позволяет сделать это; Вы можете поместить свойство за пределы ключа и немного настроить DAO, чтобы при необходимости учитывать это поле

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