@Id для oracle.rowid - PullRequest
       8

@Id для oracle.rowid

0 голосов
/ 25 сентября 2010

Как объявить класс @Entity для таблицы оракула без ПК?

Я получил сообщение об ошибке: Столбец "rowid" не может быть разрешен в таблице "LOG"

при отображении так:

@ Entity открытый класс Log реализует Serializable { ... @Я бы приватный ROWID rowid; ... }

1 Ответ

0 голосов
/ 25 сентября 2010

Как объявить класс @Entity для таблицы оракула без ПК?

Отображение ROWID как Id не поддерживается стандартным JPA, и я не смог найти очевидных доказательств того, что EclipseLink предоставляет расширение для этого (я нашел только это сообщение ).

Но это не единственный вариант, и в викибуке JPA есть хороший параграф об этой ситуации:

Нет первичного ключа

Иногда у вашего объекта или таблицы нет основной ключ. Лучшее решение в этом случай обычно добавить сгенерированный идентификатор к объекту и столу. Если вы этого не сделаете есть эта опция, иногда есть столбец или набор столбцов в таблице которые составляют уникальную ценность. Вы можете использовать этот уникальный набор столбцов в качестве вашего идентификатор в JPA. JPA Id не имеет всегда должны соответствовать базе данных таблицы первичного ключа, а также первичный ключ или уникальное ограничение требуется.

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

Если у вашего объекта нет идентификатора, но его таблица делает, это хорошо. Сделай объект и Embeddable объект, встраиваемые объекты не имеют Идентификаторы. Вам понадобится Entity, что содержит это Embeddable для сохранения и запросить его.

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