Hibernate отображает составной ключ с нулевыми значениями

StackOverflow https://stackoverflow.com/questions/70909

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top