Spring Boot org.hibernate.exception.ConstraintViolationException - PullRequest
0 голосов
/ 10 мая 2018

Я получаю исключение .ConstraintViolationException при попытке сохранить данные с помощью API POST REST.

Причина: org.postgresql.util.PSQLException: ОШИБКА: нулевое значение в столбце "id" нарушает ненулевое ограничение Подробно: в строке «Ошибка» содержится (ноль, Джон Доу, как дела? Я в порядке).

Я использую @GeneratedValue (стратегии = GenerationType.IDENTITY) для автоматической генерации «id» из Hibernate, и я не уверен, что мне не хватает какой-либо конфигурации в application.properties. Я использую Postgres DB.

Я попытался использовать GenerationType.AUTO, и я получил сообщение об ошибке hibernate_sequence от postgres.

Спасибо!

Ввод POST REST API с использованием Postman

            {   
                "personName": "John Doe",
                "question": "How are you?",
                "response": "I am fine"
            }

questionnaries.sql

            CREATE TABLE questionnaries( 
            id BIGINT PRIMARY KEY,
            personName VARCHAR(255) NOT NULL,
            question VARCHAR(255) NOT NULL,
            response VARCHAR(255) NOT NULL
            );

Questionnarie.java #

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

@Entity
@Table(name = "questionnaries")
public class Questionnarie {



    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;


    @Column(name = "personname")
    @NotNull
    private String personname;


    @Column(name = "question")
    @NotNull
    private String question;

    @Column(name = "response")
    @NotNull
    private String response;

    public Questionnarie() {}

    public Questionnarie(@NotNull String personname, @NotNull String question, @NotNull String response) {
        super();
        this.personname = personname;
        this.question = question;
        this.response = response;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getPersonname() {
        return personname;
    }

    public void setPersonname(String personname) {
        this.personname = personname;
    }

    public String getQuestion() {
        return question;
    }

    public void setQuestion(String question) {
        this.question = question;
    }

    public String getResponse() {
        return response;
    }

    public void setResponse(String response) {
        this.response = response;
    }}

application.properties

# ===============================
# = DATA SOURCE
# ===============================
# Set here configurations for the database connection

spring.datasource.jndi-name=java:jboss/datasources/test_data_source

# ===============================
# = JPA / HIBERNATE
# ===============================
# Show or not log for each sql query
spring.jpa.show-sql=true

# Allows Hibernate to generate SQL optimized for a particular DBMS
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

1 Ответ

0 голосов
/ 10 мая 2018

Это означает, что ваша база данных поддерживает последовательности для значений первичного ключа. Так что в вашем случае вам нужно будет создать последовательность базы данных, а затем использовать @GeneratedValue(strategy=GenerationType.AUTO) или @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq") @SequenceGenerator(name="seq", sequenceName = "db_seq_name") для генерации значений для полей первичного ключа.

Также убедитесь, что вы добавили SERIAL в ваш SQL, чтобы он выглядел так: id SERIAL PRIMARY KEY

См. Документацию PostgreSQL для типов последовательных данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...