#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. Хорошо, спасибо — я думаю, мне придется привыкнуть называть все вручную 🙂