Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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