пятница, 18 марта 2011 г.

Autogenerated FK in Hibernate

Страдаете от Hibernate'овского identifier too long? Тогда мы идём к вам!

Hibernate даёт свои автогенеренные названия для Foreign Key по одним разработчикам понятному принципу.
Вообще говоря, ничего необычного: 'FK' и ещё 16 символов - по 8 от hashcode имени каждой из участвующих таблиц (там не совсем hashCode, но и неважно).
Что получается, когда сущности (@Entity) наследуются? FK разрастается на 8 символов за каждый уровень наследования. То есть, для одиночного наследования длина FK будет уже не 18, а 18+8=26 символов, а при добавлении в эту иерархию ещё 1 сущности уже 18+2*8=34.
Самое время вспомнить о всеми любимом ограничении Oracle (и некоторых ещё СУБД) на длину идентификаторов в 30 символов.

Решение
Баг в Hibernate в открытом состоянии уже 3 года. Видимо, не сильно мешает, т.к. исправить ситуацию довольно просто: нужно дать своё имя для FK аннотацией в стиле:
@ForeignKey(name="myFKname")

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

Отправить комментарий