EJB3NamingStrategy против ImprovedNamingStrategy именование внешнего ключа

#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 {}