#java #hibernate
#java #переход в спящий режим
Вопрос:
Моя стратегия именования в режиме гибернации была стандартной: EJB3NamingStrategy. Итак, имена полей и таблиц были в camelcase. Я переключил его на ImprovedNamingStrategy, чтобы иметь snakecase.
Но мои внешние ключи не включают имя первичного ключа объекта, на который ссылается объект, в имени.
Пример:
таблица 1: имя идентификатора
С EJB3NamingStrategy поля table2 будут:
таблица 2: идентификатор table1_id
но с ImprovedNamingStrategy поля table2 будут: table2: id table1
Есть ли способ иметь _id с ImprovedNamingStrategy. Я не понимаю, почему hibernate ведет себя по-разному, потому что метод logicalCollectionColumnName в обеих стратегиях идентичен.
Ответ №1:
Расширьте improvedNamingStrategy и настройте, возможно, первоначальная реализация ImprovedNamingStrategy ошиблась, а затем они не смогли это исправить, поскольку это нарушило бы обратную совместимость.
Комментарии:
1. параметр, полученный в logicalCollectionColumnName, уже содержит column_id, если я использую EJB3NamingStrategy, но если я использую ImprovedNamingStrategy, параметр не получает его. Я не понимаю, почему. Этот метод вызывается откуда-то еще в коде.
2. Да, ваша запись, я не искал правильный метод. Часть идентификатора прокомментирована
Ответ №2:
Эта проблема решена в Spring boot 1.2.7.RELEASE. Ссылка на этот поток также указана в документации пакета гибернации jpa. Подпись класса следующим образом:
package org.springframework.boot.orm.jpa.hibernate;
public class SpringNamingStrategy extends ImprovedNamingStrategy {}