Hibernate сопоставление составного ключа с нулевыми значениями
С Hibernate, вы можете создать составной идентификатор, где один из столбцов, которые вы сопоставляете с идентификатором, может иметь нулевые значения?
Это относится к устаревшей таблице, которая имеет уникальный ключ, который может иметь нулевые значения, но не иметь первичного ключа.
Я понимаю, что могу просто добавить новый столбец первичного ключа в таблицу, но мне интересно, есть ли способ избежать этого.
6 ответов
Вы не получите ошибку, но Hibernate не сможет отобразить эти строки со значением NULL для составного столбца в вашу сущность. Это означает, что в результате вы получите сущность со значениями NULL.
К сожалению, нет. Я либо должен был использовать обходной путь:
Я использовал составной идентификатор для представления (! Не таблицы), где строки могут быть точно определены по 2 столбцам (A, B). Хотя один из столбцов (B) может иметь как нулевые значения, так и целые положительные числа. Так что мой обходной путь заключается в том, что я создал новый столбец в представлении: "BKey", и мое представление записывается так, как будто B равно нулю, тогда значение BKey равно -1, иначе BKey = B. (В B встречаются только положительные целые числа и ноль). Я также изменил мою реализацию composit id, чтобы использовать BKey вместо B. Надеюсь, это кому-нибудь поможет...
Для составных ключей (предполагается, что база данных допускает нулевые значения в PK), вы можете иметь максимальное количество записей_____ ^2 - 1, содержащих нулевые значения (например, для составного ключа из 2 столбцов вы можете иметь 3 строки, имеющие в своем первичном ключе значение NULL, четвертой является ПК без нулей).
Это не рекомендуется. Не могли бы вы использовать вид и карту вместо этого? Вы можете использовать COALESCE для предоставления значения по умолчанию, если вы застряли с устаревшими данными. У нас было много проблем с составными ключами, и я думаю, что нулевые значения вызовут еще больше проблем.
Почему вы хотите это сделать? Ваш составной идентификатор должен отображать первичный ключ вашей таблицы, и не стоит ли ставить нулевые значения в ключе, не так ли?
РЕДАКТИРОВАТЬ: Hibernate не позволяет сделать это; Вы можете поместить свойство вне ключа и немного подправить DAO, чтобы при необходимости учитывать поле