Указание неуникального столбца в качестве поля @Id в hibernate - PullRequest
0 голосов
/ 17 августа 2011

Я сохраняю результаты @NamedNativeQuery в Bean-компоненте, и чаще всего результаты запроса не являются уникальными, а также я не переопределяю HashCode и Equals of bean-компонента, поскольку моя цель - просто заполнить данные (query resultSet) независимо от того,дубликаты или нет.

Я просто хочу знать, что может быть следствием указания @Id в неуникальном поле?

Ответы [ 2 ]

3 голосов
/ 17 августа 2011

ID по любому определению (от RDBMS до Hibernate) является уникальным.Это уникальный ключ для идентификации и различения конкретной сущности.Выполнение этого каким-либо другим способом является ужасным антипаттерном, и вы никогда, ни при каких обстоятельствах, даже не должны его учитывать.

Если вам нужен агрегат («независимо от того, является ли он дублирующим или нет»), используйте агрегат,Выберите с различными, и / или ограничением, и / или группой.

Тот факт, что оно не выдает исключение, не делает его разумным.Это будет кусать тебя в будущем.Я думаю, что это произойдет примерно так: всякий раз, когда вы загружаете объект по идентификатору, он возвращает случайную копию.Даже если вы загрузите их коллекцию, вы получите случайные копии.Всякий раз, когда вы обновляете, он обновляет эту случайную копию.Как это разумная сущность личности?- И это и есть цель удостоверения личности!

1 голос
/ 17 августа 2011

Не возможно. Идентификаторы должны быть уникальными. В вашем случае вам понадобится pojo, который не является сущностью, и отобразите значения через xml (возможно, с аннотациями). Проверьте документы о наивных запросах

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