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

Table "Perfis" não existe

Boa noite, Estou usando o MySQL no meu projeto e criei as tabelas manualmente da seguinte forma:

create table user_profile (
                              id              bigint         not null auto_increment,
                              name            varchar(50)    not null,
                              primary key (id)
) engine=InnoDB default charset=utf8;

alter table user add column user_profile_id  bigint         not null;

alter table user
    add constraint fk_user_user_profile
        foreign key (user_profile_id)
            references user_profile (id);

Por ser not_null, no meu after_migrate (estou usando o Flyway como versionamento de db), tive que criar um perfil e atribuir ele à todos os usuarios. No entanto, ao seguir os passos aqui, estou recebendo o seguinte erro:

InternalAuthenticationServiceException: could not extract ResultSet; SQL [n/a].........
Caused by: java.sql.SQLSyntaxErrorException: Table '.....user_profiles' doesn't exist

Notei que o nome da tabela não encontrada difere da tabela que eu criei, e até cheguei a alterar para o plural no banco, porém o erro apareceu novamente, mas dessa vez '......user_profile' doesn't exist

Da forma que foi implementado até agora, funcionaria eu tendo um perfil cadastrado? Caso seja esse o problema, tranquilo pois imagino que nas próximas aulas implementaremos perfis e verei como fazer pra funcionar. Mas caso não, qual seria o problema então?

Obrigado!

6 respostas

Oi Levy,

Pode ser problema no mapeamento do relacionamento na entidade User. Posta aqui o código das suas classes entidades.

Bom dia, Rodrigo Segue.

@Id
    @EqualsAndHashCode.Include
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String email;

    private String password;

    @ManyToMany (fetch = FetchType.EAGER)
    private List<UserProfile> profiles = new ArrayList<>();

No relacionamento com profiles você vai precisar indicar o nome da tabela de join, pois o padrão será nome da entidade + nome do atributo do relacionamento, que no seu caso atual será: user_profiles.

@ManyToMany (fetch = FetchType.EAGER)
@JoinTable(name = "user_profile")
private List<UserProfile> profiles = new ArrayList<>();
solução!

Obrigado! Ainda continua com este erro:

Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'profiles0_.user_id' in 'field list'

Por ser many to many, eu teria que referenciar user em user profiles também?

Agora na verdade precisaria ajustar as suas tabelas no banco de dados, pois você criou de uma forma que o usuaário so tenha um único profile, com a coluna user_profile_id na tabela user, mas desse jeito não terá como mapear o relacionamento como sendo do tipo many to many.

Valeu! Muito obrigado!