Допустим, у меня есть сущность с очень длинным названием:Hibernate: пользовательские имя сущности
@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
, который также не работает с оракулом.
Теперь одним из вариантов было бы добавить аннотацию @CollectionTable(name="SuperPanda_nicknames")
и @Column(name="...")
вручную для каждого поля, которое ссылается на этот объект, но это очень много работы и действительно подвержено ошибкам.
Есть ли способ просто сообщить Hibernate как только использовать короткое имя везде, где требуется ссылка на объект?
Я также попытался установить имя лица, например:
@Entity(name="SuperPanda")
@Table(name="SuperPanda")
public class SupercalifragilisticexpialidociousPanda
{
...
}
... но это не решает проблему.
Что обычно делается в таком случае?
Хорошо, спасибо. Полагаю, мне придется привыкнуть к тому, чтобы вручную называть все :) – vtosh