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

Usuario is not mapped

Estou tomando um erro muito estranho. Apesar de minha classe usuário estar anotada como "@Entity", quando tento consumir o Endpoint, ocorre a exceção:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Usuario is not mapped
        at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:169)
        at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91)
        at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:77)

Aproveitando, gostaria de tirar uma dúvida: Quando utilizamos esse recurso de segurança com @UserDefinition, o padrão será necessariamente Active Record ou existe alguma forma de dizer ao framework que utilizaremos um Repository para manter padronizado com o restante das entidades?

4 respostas

Oi Fabiano

Como está a sua query que usa Usuario e dá esse erro?

Otávio,

No log de erro, ele apresenta o seguinte JPQL:

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Usuario is not mapped [FROM Usuario WHERE login = :name]

Que é gerado por baixo dos panos com base na minha implementação de Usuário que está assim:

@Entity(name = "tb_usuario")
@UserDefinition
public class Usuario extends PanacheEntityBase {

    @Id
    @Column(name = "id_usuario")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Username
    @Column(name = "nm_login")
    private String login;
    @Password
    @Column(name = "nm_senha")
    private String senha;
    @Roles
    @Column(name = "nm_role")
    private String role;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

esse @Entity é do import javax.persistence.Entity?

solução!

É sim, Otávio.

Eu consegui matar a questão. O problema é exatamente o "name" daquele @Entity. Ao remover esse atributo substituindo pelo @Table, o código funcionou. A conclusão que cheguei é de que o @UserDefinition não está considerando este atributo na hora de montar o JPQL, ele pega apenas o nome da classe. De qualquer forma, obrigado aí pelos comentários.

abraços,

@Entity
@Table(name = "tb_usuario")
@UserDefinition
public class Usuario extends PanacheEntityBase {

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software