Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Dúvidas: Unknown column 'numero_termo' in 'field list'

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!

1 resposta
solução!

Oi!

É isso mesmo, nas últimas versões do hibernate ele usa o padrão de separar os nomes das colunas com underline e não aceita camelCase (mesmo colocando o @Column).

Para trocar esse comportamento e voltar para o jeito antigo, basta adicionar essa propriedade que você mencionou no application.properties.

Bons estudos!