2016-10-13 2 views
0

Допустим, у меня есть сущность с очень длинным названием: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 
{ 
    ... 
} 

... но это не решает проблему.

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

ответ

1

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

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

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

+0

Хорошо, спасибо. Полагаю, мне придется привыкнуть к тому, чтобы вручную называть все :) – vtosh

Смежные вопросы