Taverna /dev/All

Nomes de método como Query (Spring Data JPA)

Olá.

Estou tentando entender como funcionam as querys a partir de nome com o Spring JPA. Estou usando Hibernate, também.

Por exemplo, dada essa tabela:

Fiz a seguinte implementação do repository:

public interface TokenRepository extends Repository<TokenEntity, String> {

    void save(TokenEntity token);
}

E ela executa bem sua função (salvar algo no banco). Todavia, agora gostaria de fazer uma consulta… mas não entendi muito bem sobre isso.

Como deveria ser a assinatura do método (especialmente seu tipo de retorno), uma vez que eu quero filtrar ainda pelo campo “token_app”?

Já tentei

@org.springframework.stereotype.Repository
public interface TokenRepository extends Repository<TokenEntity, String> {

    void save(TokenEntity token);

    TokenEntity findByToken_app(String token_app);
}

Mas em tempo de compilação ele falha.

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘authenticationController’ defined in file [/home/fearx/Modelos/IdeaProjects/tools-api/out/production/classes/me/company/toolsapi/controllers/AuthenticationController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘authenticationModel’ defined in file [/home/fearx/Modelos/IdeaProjects/tools-api/out/production/classes/me/company/toolsapi/model/autentication/AuthenticationModel.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘tokenRepository’: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract me.company.toolsapi.entitys.autentication.token.TokenEntity me.company.toolsapi.repository.TokenRepository.findByToken_app(java.lang.String)! No property token found for type TokenEntity!

Qualquer luz é bem vinda.

[]'s

Opa, parece que resolvi.

Usando uma resposta lá do GUJ:

O Spring Data trata o underscore (_) como um identificador a parte.
Ou seja, ele entende que você tem uma propriedade chamada “token” e que esse cara é um objeto. E, a partir disso, você quer pegar algo nele que se chama “app”.

Uma opção para solucionar

Fica de aprendizado se alguém um dia precisar! :slight_smile:

Dá uma lida neste link: https://docs.spring.io/spring-data/jpa/docs/2.1.9.RELEASE/reference/html/#repositories.query-methods.details

Nesta parte da documentação do Spring Data explica direitinho como escrever os query methods, que é a sua dúvida.

itexto