Как установить значения, рассматриваемые как NULL в отношениях JPA - PullRequest
3 голосов
/ 29 августа 2011

У меня есть сущность «A» с отношением «один ко многим» (1: n) к другой сущности «B».К сожалению, база данных (для существующих лет) определяет столбец в B для первичного ключа от A до NOT NULL, но это отношение не является обязательным.Следовательно, этот столбец просто получает -1, если Emtity A не связан.

Как я могу отобразить это в JPA / Hibernate?Я получаю следующее исключение:

Exception in thread "main" 
javax.persistence.EntityNotFoundException: 
Unable to find A with id -1

Я знаю, что это правильно, но, возможно, есть обходной путь?

И, пожалуйста, не вините меня за модель данных: -)

Ответы [ 2 ]

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

Я знаю, что переворачивать модель данных вверх ногами через годы и годы - это не прогулка в парке.Тем более, что вам придется заглядывать в каждый уголок каждого приложенного приложения и т. Д., Чтобы выяснить, не затронуты ли они.Это является внешним ключом, и есть вероятность, что его изменение повлияет на многие вещи, или, по крайней мере, в значительной степени.

Тем не менее, возможно, стоит поговорить с администратором базы данных об использовании какой-либо конструкции для * 1003.*

  • сохранить текущую модель данных
  • позволит вам получить доступ к этим данным другим способом

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

  • показывать каждое значение -1 как ноль
  • гарантирует, что вставки нулевого значения преобразуются в -1 в столбце, к которому он относится (возможно, с помощью триггера)

Если вы измените настройку Hibernate / JPA, чтобы использовать этот столбец вместо исходного ..

Я просто надеюсь, что у вас есть администратор баз данных с некоторым опытом и - что еще более важно - без опасения экспериментировать (конечно,в тестовой среде).

Удачи!Wim

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

Вы можете использовать аннотацию @NotFound(action = NotFoundAction.IGNORE) в свойстве B.a. Но это будет работать только при чтении ассоциации. Если вы хотите иметь возможность установить B.a на ноль и сделать так, чтобы в базе данных он вставлял -1 вместо ноля, я понятия не имею.

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