Ошибка при использовании последовательности для первичного ключа в postgres и Hibernate

#postgresql #hibernate #jpa

#postgresql #спящий режим #jpa

Вопрос:

Я использую JPA / Hibernate и postgres в качестве своей базы данных

Я создал последовательность в postgres следующим образом:

 CREATE SEQUENCE player_sequence
INCREMENT 20
START 1;
  

Я хочу, чтобы Hibernate использовал указанную выше последовательность для первичного ключа.

Идентификационная часть объекта является:

 @Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "player_seq")
@SequenceGenerator(name = "player_seq", sequenceName = "player_sequence", allocationSize = 20)
private Integer id;
  

Когда я создаю новый проигрыватель и пытаюсь сохранить его с помощью EntityManger.persist метода, я получаю следующую ошибку:

Гибернация: выберите next_val как id_val из player_sequence для обновления org.hibernate.id.enhanced.ОШИБКА выполнения структуры таблицы $1 $1: не удалось прочитать значение hi org.postgresql.util.Исключение PSQLException: ОШИБКА: столбец «next_val» не существует

Я не понимаю, что я делаю не так

Редактировать:

Вот содержимое persistence.xml:

введите описание изображения здесь

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

1. Не могли бы вы, пожалуйста, показать свою конфигурацию hibernate. Какую версию гибернации вы используете?

2. Я добавил persistence.xml содержимое файла, о котором шла речь выше

Ответ №1:

Попробуйте исправить это persistence.xml таким образом:

 <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
             version="2.2">

    <persistence-unit name="my-persistence-unit">
        <description>...</description>
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>


        <properties>
            <!--  It was wrong !!!  -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL10Dialect" />

            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/basketball" />
            <property name="javax.persistence.jdbc.user" value="postgres" />
            <property name="javax.persistence.jdbc.password" value="1234" />
            
            <property name="hibernate.show_sql" value="true" />

        </properties>

    </persistence-unit>

</persistence>