Boa tarde!
Quando fui usar o método "save( )" para inserir um registro no banco de dados (mysql), houve uma exception, que dizia que o meu id estava null, e isso eu consegui resolver simplesmente setando o id antes de salvá-lo:
@SpringBootApplication
public class SpringDataApplication implements CommandLineRunner {
private final CargoRepository repository;
public SpringDataApplication (CargoRepository repository) {
this.repository = repository;
}
public static void main(String[] args) {
SpringApplication.run(SpringDataApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
Cargo cargo = new Cargo();
cargo.setDescricao("desenvolvedor de software");
cargo.setId(1);
repository.save(cargo);
}
Mas isso não tá correto, visto que eu mandei o jpa gerar o id automaticamente nessa classe (cargo):
@Entity
@Table(name = "cargos")
public class Cargo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String descricao;
Como resolver isso? Já dei um "describe" lá no mysql e a tabela realmente está como "auto_increment"!
Erro:
Caused by: java.lang.reflect.InvocationTargetException: null
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:116) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:577) ~[na:na]
at org.springframework.beans.BeanWrapperImpl$BeanPropertyHandler.getValue(BeanWrapperImpl.java:308) ~[spring-beans-5.3.25.jar:5.3.25]
at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyValue(AbstractNestablePropertyAccessor.java:630) ~[spring-beans-5.3.25.jar:5.3.25]
... 37 common frames omitted
Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because "this.id" is null
at br.com.alura.spring.data.model.Cargo.getId(Cargo.java:23) ~[classes/:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
... 40 common frames omitted