Гибернация: пользовательское имя объекта

#java #oracle #hibernate #jpa

#java #Oracle #спящий режим #jpa

Вопрос:

Допустим, у меня есть объект с очень длинным именем:

 @Entity
public class SupercalifragilisticexpialidociousPanda
{
    ...
}
 

Использование Hibernate для сохранения его в базе данных Postgres работает безупречно. Однако Oracle не разрешает имена таблиц / столбцов / индексов длиной более 30 символов.
Это должно быть легко исправить, поскольку я могу просто указать имя таблицы вручную, например:

 @Entity
@Table(name="SuperPanda")
public class SupercalifragilisticexpialidociousPanda
{
    ...
}
 

Теперь все снова работает идеально… за исключением того, что любые ссылки, которые у меня есть на объект в других таблицах, по-прежнему используют длинное имя класса («SupercalifragilisticexpialidociousPanda») вместо короткого имени таблицы («SuperPanda»).

Например, если объект имеет встроенный ElementCollection, например:

 @ElementCollection
private Set<String> nicknames;
 

Hibernate попытается создать базу данных, подобную этой: create table SupercalifragilisticexpialidociousPanda_nicknames , что, естественно, приведет ORA-00972: identifier is too long к ошибке.

То же самое происходит и для @OneToOne ассоциаций, где столбец поиска будет называться примерно так supercalifragilisticexpialidociousPanda_uuid , что также не удается с oracle.

Теперь одним из вариантов было бы добавить @CollectionTable(name="SuperPanda_nicknames") @Column(name="...") аннотацию и вручную к каждому полю, которое ссылается на этот объект, но это много работы и действительно подвержено ошибкам.

Есть ли способ просто указать Hibernate один раз использовать короткое имя везде, где требуется ссылка на объект?

Я также попытался установить имя объекта, например:

 @Entity(name="SuperPanda")
@Table(name="SuperPanda")
public class SupercalifragilisticexpialidociousPanda
{
    ...
}
 

… но это не устраняет проблему.

Что обычно делают в таком случае?

Ответ №1:

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

Все ссылки могут быть настроены так или иначе для использования имен, которые вы решите использовать.

Задайте конкретный вопрос на случай, если вы сможете найти способ сделать это самостоятельно.

Комментарии:

1. Хорошо, спасибо — я думаю, мне придется привыкнуть называть все вручную 🙂