@keks99999
1С-ник, решивший соскочить на java

Как правильно настроить hibernate на использование GenerationType.IDENTITY при добавлении записи в БД?

Пытаюсь разобраться со связкой spring jpa + hibernate. Исходные данные:
- БД - postgresql 10
- Для генерации id cущности использую sequence в БД
- не SpringBoot - разворачиваю war в Tomcat

Сущность:
@Entity
@Table(name = "category")
public class Category {

    @Id
    @Column(name = "category_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
//остальные члены класса
}


Репозиторий для работы с БД:
@Repository
public interface CategoryRepository extends JpaRepository<Category, Integer> {
}


Проблема - при попытке добавить запись в БД получаю ошибку:
org.postgresql.util.PSQLException: ОШИБКА: отношение "category_category_id_seq" не существует

Т.е. hibernate вместо того, чтобы опираться на на sequence в БД при добавлении записи (он должен это делать в соответствии с аннотацией @GeneratedValue(strategy = GenerationType.IDENTITY)) пытается вычислить id из таблицы category_category_id_seq, которой нет.

При этом получение записей из БД или обновление существующих работает корректно. Работу sequence проверял ручным добавлением записи в БД.

upd:
Порылся в исходниках hibernate и в диалекте для своей БД нашел что для вычисления идентификатора используется запрос вида select currval('" + table + '_' + column + "_seq'), т.е. идет обращение именно к sequence, а она у меня называется не так.
category_category_id_seq
  • Вопрос задан
  • 1197 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы