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

Problema com o JDBC

Pessoal, com as informações do curso resolvi fazer um "algo a mais". Com isso cheguei a um erro ao tentar fazer um relacionamento entre entidades e não estou conseguindo chegar a alguma solução. Alguém pode me dar uma luz?

JDBC exception executing SQL [select u1_0.user_id,u1_0.full_name,u1_0.user_password,u1_0.user_name from tb_users u1_0 where u1_0.user_id=?] [Table 'easysocial.tb_users' doesn't exist] [n/a]

@Entity
@Table(name = "tb_users")
@Data
public class User implements UserDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "user_id", unique = true)
    private UUID id;

    @Column(name = "full_name")
    private String fullName;

    @Column(name = "user_name", unique = true)
    private String userName;

    @Column(name = "user_password")
    private String password;

    @OneToMany(fetch = FetchType.LAZY)
    @JoinColumn(referencedColumnName = "user_id")
    private List<CellPhone> cellPhones;

    public User(String fullName, String userName, String password, List<CellPhone> cellPhones) {
        this.fullName = fullName;
        this.userName = userName;
        this.password = password;
        this.cellPhones = cellPhones;
    }

    public void update(String fullName, String userName, String password, List<CellPhone> cellPhones){
        if(!fullName.isBlank()){
            this.fullName = fullName;
        }

        if(!userName.isBlank() || userName.length() < 4){
            this.userName = userName;
        }

        if(!password.isBlank() || password.length() < 4){
            this.password = password;

        }

        this.cellPhones = cellPhones;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return List.of(new SimpleGrantedAuthority("ROLE_USER"));
    }

    public String getPassword() {
        return password;
    }

    @Override
    public String getUsername() {
        return this.userName;
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }
}
@Entity
@Table(name = "tb_cellphone")
@Data
public class CellPhone {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "phone_id", unique = true)
    private UUID id;

    @Column(name = "cell_phone")
    private String cellphone;

    @Column(name = "user_id")
    private UUID userId;
}
15 respostas

As migrations que fiz

CREATE TABLE TB_USERS(
    user_id binary(16),
    full_name varchar(255),
    user_name varchar(50),
    user_password varchar(100),

    CONSTRAINT PK_USER PRIMARY KEY (user_id)
);
CREATE TABLE TB_CELLPHONES(
    post_id binary(16),
    cell_phone MEDIUMTEXT,
    user_id binary(16),

    PRIMARY KEY (post_id),
    FOREIGN KEY (user_id) REFERENCES TB_USERS(user_id)
);

Oi Igor!

O problema é que na entidade você colocou @Table(name = "tb_users") mas na migration a tabela foi criada com o nome TB_USERS.

Lembre-se que tanto o Java quanto o MySQL são case sensitive, diferenciando letras minúsculas de maiúsculas.

O Problema ainda se manteve Rodrigo, tem algo a mais que eu possa alterar?

Erro: could not execute statement [Table 'easysocial.tb_users' doesn't exist] [insert into tb_users (full_name,user_password,user_name,user_id) values (?,?,?,?)]; SQL [insert into tb_users (full_name,user_password,user_name,user_id) values (?,?,?,?)]

Na vdd mudou, era esse que eu queria postar

Ele tá chegando assim no service de criar

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Você renomeou a tabela? Tem 2 possibilidades, renomear a tabela para tb_users ou trocar a anotação para @Table(name = "TB_USERS")

Eu troquei a anotação para TB_USERS

Blz, e agora está dando algum outro erro?

Erro: could not execute statement [Table 'easysocial.tb_users' doesn't exist] [insert into tb_users (full_name,user_password,user_name,user_id) values (?,?,?,?)]; SQL [insert into tb_users (full_name,user_password,user_name,user_id) values (?,?,?,?)]

Esse é diferente do primeiro

As tabelas e colunas

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O erro ainda continua o mesmo: Table 'easysocial.tb_users' doesn't exist

Ele ainda está considerando o nome da tabela em minúsculo. Confere na sua classe se a anotação @Table está sendo importada do pacote da JPA (jakarta.persistence) e reinicia o projeto manualmente, pois pode não ter pegado as mudanças no código automático.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Solução era adicionar essa config

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl