4
respostas

Nome da tablela Entity

O nome da minha tabela em meu banco esta com letras maiúsculas, e o spring quando vai procurar a tabela, ele procura com a letra minúscula. Olha como esta o começo do meu model:


@Entity
@Table(name = "\"ENDERECO_CLIENTE\"")
@NoArgsConstructor
@AllArgsConstructor
public class ShoppignModel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id_endereco_cliente;
    
    ...

Fiz os getter e setter na mão.

4 respostas

Olá! Tudo bem? Isso não causará nenhum problema na sua aplicação, a linguagem SQL, que é usada para se comunicar com o banco de dados, é case-insensitive, ou seja, não distingue letras maiúsculas de minúsculas, por exemplo as seguintes queries teriam o mesmo resultado:

SELECT * FROM ENDERECO_CLIENTE;
select * from endereco_cliente;

No geral, quando trabalhamos com SQL, deixamos os comandos e palavras reservadas do SQL em letra maiúscula e o nome das tabelas e das colunas em letra minúscula, isso ajuda bastante principalmente quando se programa em inglês, pois assim fica mais fácil identificar o que é do SQL e o que é criação nossa. Quando usamos Spring, no geral o padrão que é seguido é usar o nome da tabela com letra minúscula e no plural, e deixar o nome da entidade no singular e com a primeira letra maiúscula, por exemplo:

@Entity(name = "Pessoa")
@Table(name = "pessoas")
@NoArgsConstructor
@AllArgsConstructor
public class Pessoa {
    ...
}

Mas isso é só um padrão da comunidade, você pode escolher o nome que você quiser para a sua tabela no banco de dados, inclusive pode até deixar sem nome, assim o Spring cria o nome por conta própria de acordo com o nome da classe. Espero ter ajudado!

não funciona, tem que pesquisar a tabela com as letras em tudo em maiúsculas

Minha classe esta assim:


@Entity(name = "ShoppignModel")
@Table(name = "ENDERECO_CLIENTE")
public class ShoppignModel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id_endereco_cliente;
    
    ...
}

Mas olha como o Spring faz a busca no banco, e da erro de tabela não encontrada:

Hibernate: 
    select
        s1_0.id_endereco_cliente,
        s1_0.ativo,
        s1_0.caminho_cliente,
        s1_0.keyword,
        s1_0.nome_endereco_cliente,
        s1_0.uf 
    from
        endereco_cliente s1_0 limit ?,
        ?
Hibernate: 
    select
        count(s1_0.id_endereco_cliente) 
    from
        endereco_cliente s1_0

O erro acontece quando você tentar rodar a aplicação ou só quando você realiza uma busca no banco de dados? Você pode ter certeza que o problema não é estar em letra maiúscula ou não, existem várias possibilidades: erro de configuração no application.properties, base de dados não existente, tabela já criada anteriormente com outro nome, problema com o schema do Flyway (se você estiver usando), query mal formulada no repository, e muitas outras possibilidades. Você consegue mostrar aqui o erro mostrado no console pelo Spring, o seu arquivo application.properties, e a interface Repository que você está usando? Se puder colocar o código do seu projeto no GitHub e compartilhar o link aqui seria ainda mais fácil.

Acho que voce não criou a tabela ou deixou a jpa criar automaticamente, verifique se essa tabela existe no banco