Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Problemas com ID

Estou tentando fazer uma API (não exatamente igual a do curso, mas seguindo o passo a passo) e usando o arquivo data.sql. Comecei a inserir os dados pelo id=1, mas quando tento fazer o put na API ele tenta gerar outro id=1 e aí dá erro, então alterei os valores de id do data.sql, aí funcionou. Mas pela vídeo aula parece que o spring identifica o último valor do banco de dados e acrescenta +1. Como faz isso? Eu esqueci alguma anotação?

Arquivo application.properties:

spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:banco
spring.datasource.username=sa
spring.datasource.password=

spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

spring.h2.console.enabled=true
spring.h2.console.path=/h2

spring.jpa.defer-datasource-initialization=true

Arquivo data.sql:

...

INSERT INTO pets(id, nome, raca, idade, data_cadastro) VALUES (100, 'miina', 'pinscher', 9, '2022-09-25 19:00:00')
INSERT INTO pets(id, nome, raca, idade, data_cadastro) VALUES (200, 'khadija', 'poodle', 2, '2022-09-25 19:00:00')

INSERT INTO tutores(id, nome, telefone1, data_cadastro) VALUES (100, 'maria', '0923940294', '2022-09-25 19:00:00')
INSERT INTO tutores(id, nome, telefone1, data_cadastro) VALUES (200, 'ana', '923840294', '2022-09-25 19:00:00')

Arquivo Pet.java (usando Lombok):

@Entity
@Table(name = "pets")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Pet {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(length = 150, nullable = false)
    private String nome;
    ...
    //Construtor para PetCadastroForm
    public Pet(String nome, String especie, String raca, Integer idade, String detalhe, Tutor tutor) {
    this.nome = nome;
    this.especie = especie;
    this.raca = raca;
    this.idade = idade;
    this.detalhe = detalhe;
    this.tutor = tutor;
    }
2 respostas
solução!

Oi Rebeca,

eu mexi muito pouco com spring para te dar um conselho mais a fundo, mas pelo menos no SQL se você tem uma coluna ID da tabela criada com o atributo 'identidade', ele deve sim fazer a atualização automática.

Por acaso você já tentou omitir a inserção manual do id?

/*INSERT INTO pets(id, nome, raca, idade, data_cadastro) VALUES (100, 'miina', 'pinscher', 9, '2022-09-25 19:00:00')*/
INSERT INTO pets(nome, raca, idade, data_cadastro) VALUES ('miina', 'pinscher', 9, '2022-09-25 19:00:00')

Omiti aqui e funcionoooou! Muito obrigada!!