Последовательность создания отрицательного значения и значения по умолчанию, не вставляемого в Spring Boot и H2 DB при создании ресурса через REST API - PullRequest
0 голосов
/ 31 мая 2018

У меня есть Spring Boot на основе REST API, который поддерживает CRUD операции с ресурсом.Все методы работают нормально, кроме POST, где я вижу две проблемы:

  1. Раздел Response (упомянутый ниже) сохраняет значение active как null, даже если для БД установлено значение по умолчанию:'Y' определено в schema.sql
  2. Последовательность генерирует отрицательное значение (-45), даже если последовательность должна начинаться с 1 и увеличиваться на, как определено в schema.sql

Конечная точка:

http://localhost:8080/client (POST)

Полезная нагрузка:

{
    "clientName": "Walmart"
}

Ответ: (Почему активное поле пусто и id =-45 вместо 4 здесь ???)

{
    "clientName": "Walmart",
    "active": null, //THIS SHOULD BE 'Y'
    "_links": {
        "self": {
            "href": "http://localhost:8080/client/-45" (THIS SHOULD BE 4 INSTEAD OF -45)
        },
        "client": {
            "href": "http://localhost:8080/client/-45"
        }
    }
}

schema.sql

CREATE SEQUENCE IF NOT EXISTS CLIENT_SEQ START WITH 1 INCREMENT BY 1;
CREATE TABLE IF NOT EXISTS CLIENT(
  CLIENT_ID     BIGINT          NOT NULL  DEFAULT CLIENT_SEQ.NEXTVAL PRIMARY KEY,
  CLIENT_NAME   VARCHAR(255)    NOT NULL,
  ACTIVE        CHAR(1)         NOT NULL  DEFAULT 'Y'
);

data.sql

INSERT INTO CLIENT(CLIENT_NAME) VALUES ('SPOTIFY');
INSERT INTO CLIENT(CLIENT_NAME) VALUES ('DAILY BURN');
INSERT INTO CLIENT(CLIENT_NAME) VALUES ('CREATIVE BUG');

ClientRepository.java

@RepositoryRestResource(path = "client")
public interface ClientRepository extends PagingAndSortingRepository<Client, Long> {

}

Client.java

@Entity
@Data
public class Client {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "client_id_generator")
    @SequenceGenerator(name = "client_id_generator", sequenceName = "client_seq")
    private Long clientId;
    private String clientName;
    private String active;
}
...