Я использую EclipseLink 2.6.2 и Oracle с моим проектом Java. Я хочу понять, как EclipseLink решает назвать внешние ключи.
В настоящее время, когда я запускаю свое приложение, я получаю сообщение об ошибке, что имя ограничения уже существует. Я могу запросить базу данных и посмотреть, какие внешние ключи были созданы, и я вижу тот, который имеет то же имя, но мне не ясно, как он создает имя. Очевидно, он удаляет все гласные, но использует ли он таблицу с таблицей 2 или имена столбцов?
Вот ошибка:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.2.v20151217-774c696): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-02264: name already used by an existing constraint
Error Code: 2264
Call: ALTER TABLE publctncompntdef_hist_ref ADD CONSTRAINT pblctncmpntdfbdpckCmpnntDfntnd FOREIGN KEY (bidpackComponentDefinitionId) REFERENCES bidpckcompntdef (bidpackComponentDefinitionId)
Имя внешнего ключа, который он пытается создать: pblctncmpntdfbdpckCmpnntDfntnd
Он пытается создать внешний ключ для таблицы publctncompntdef_hist_ref для таблицы со столбцом bidpackComponentDefinitionId ссылка на таблицу bidpckcompntdef и столбец bidpackComponentDefinitionId9 *
Но он уже создал внешний ключ с тем же именем для таблицы publctncompntdefref со столбцом bidpackComponentDefinitionId для таблицы bidpckcompntdef и столбцом bidpackComponentDefinitionId
Я гуглил и так далее, но, похоже, не могу найти документацию по стратегии именования для внешних ключей.
Кроме того, вот значения @JoinTable:
@JoinTable(name = "publctncompntdef_hist_ref",
joinColumns={@JoinColumn(name="publicationHistoryId",referencedColumnName="id")},
inverseJoinColumns={@JoinColumn(name="bidpackComponentDefinitionId",referencedColumnName="bidpackComponentDefinitionId")})
@JoinTable(name = "publctncompntdefref",
joinColumns={@JoinColumn(name="bidpackComponentDefinitionId",referencedColumnName="bidpackComponentDefinitionId")},
inverseJoinColumns={@JoinColumn(name="publicationId",referencedColumnName="id")})