Terminei o projeto desse curso e não tive nenhum problema. Para fixar o conteúdo, decidi fazer um novo projeto colocando novos atributos, como:
@Table(name = "termos")
@Entity(name = "Termos")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class Termos {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Enumerated(EnumType.STRING)
private TermoTipo tipo;
private String numeroTermo;
private String empresa;
@Embedded
private Endereco endereco;
private String objeto;
private String prazoEmMeses;
private String valorContratado;
@Enumerated(EnumType.STRING)
private AreaGestora gestor;
@Enumerated(EnumType.STRING)
private ModalidadeContratacao modalidade;
public Termos(DadosCadastroTermo dados) {
this.tipo = dados.tipo();
this.numeroTermo = dados.numeroTermo();
this.empresa = dados.empresa();
this.endereco = new Endereco(dados.endereco());
this.objeto = dados.objeto();
this.prazoEmMeses = dados.prazoEmMeses();
this.valorContratado = dados.valorContratado();
this.gestor = dados.gestor();
this.modalidade = dados.modalidade();
}
}
No insomnia:
{
"timestamp": "2023-12-17T19:49:54.719+00:00",
"status": 500,
"error": "Internal Server Error",
"trace": "org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute statement [Unknown column '**numero_termo**' in 'field list']
Pesquisando descobri que havia alguma incompatibilidade nos atributos quando se escrevem em camelCase, por exemplo "numeroTermo", "prazoEmMeses" e "valorContratado" .
Também coloquei a anotação @Column em cada atributo da Classe Termos, bem como a sua respectiva Classe DadosTermos (DTO) e não funcionou. Gostaria de saber por que não funcionou @Column nos atributos?:
@Column(name = "numeroTermo")
private String numeroTermo;
Encontrei no stackoverflow o seguinte:
"Your problem comes from the config(application.properties) used by SpringBoot in naming your column in your database. Actually if you want to solve this problem, you have to either avoid capital letters in your column name or change your Naming strategy in your application.properties and use this: spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl "
Funcionou ao colocar no application.properties: "spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl" !!!
Gostaria de saber quais são as alternativas para resolver casos como este e dicas!
Agradeço!