Criteria JPA receber um Objeto em vez de List

4 respostas
Ellyson

ola eu fiz um método em criteria, e ele retorna uma lista, mais tentei fazer um metodo, para retornar uma Objeto mais não estou conseguindo:

public List<Administrador> getAdministrador(Administrador admin){
		CriteriaBuilder builder = em.getCriteriaBuilder();
		CriteriaQuery<Administrador> query = builder.createQuery(Administrador.class);
		Root<Administrador> administrador = query.from(Administrador.class);
		CriteriaQuery<Administrador> select = query.select(administrador);
		
		Predicate predicate = 
				builder.and(builder.equal(administrador.<String> get ("senha"), admin.getSenha()), 
				builder.equal (administrador.get ("login"), admin.getLogin()));
		query.where (predicate);
		
		TypedQuery<Administrador> typedQuery = em.createQuery(select);
		return typedQuery.getResultList();
	}

4 Respostas

aix

Ola Elyson, para retornar apenas um objeto Administrador é masi fácil :slight_smile:

public Administrador findByNameAndPasswd(Administrador admin) {
        CriteriaBuilder builder = entityManager.getCriteriaBuilder();
        CriteriaQuery<Administrador> c = builder.createQuery(Administrador.class);
        Root<Administrador> root = c.from(Administrador.class);
        c.where(builder.equal(root.get(Administrador_.login), admin.getLogin()),
                builder.equal(root.get(Administrador_.senha), admin.getSenha()));
        return entityManager.createQuery(c).getSingleResult();
    }
Ellyson

Oi aix,
agora esta quase funcionando, mas ele não reconhece Administrador_.login, e Administrador_.senha, eu estou usando o JPA,

também tentei:

c.where(builder.equal(root.<String>get("login"), administrador.getLogin()),
	                builder.equal(root.<String>get("senha"), administrador.getSenha()));

ai não dar erro na compilação, mais da erro qndo coloco o login e senha invalido.

aix

Ola Ellyson, sim deve algum NoResultException não é isso? quando não há registro no database, pode colocar um trycatch ou lançar e tratar no seu serviço, quanto a não funcionar o Administrador_ é porque não esta gerando os metamodel do JPA, bom todo caso se quiser o objeto Admisnitrador deve tratar ou retornar null agora na sua lógica pode verificar se existe seria algo:

public boolean existe(Administrador admin) {
        CriteriaBuilder builder = entityManager.getCriteriaBuilder();
        CriteriaQuery<Administrador> c = builder.createQuery(Administrador.class);
        Root<Administrador> root = c.from(Administrador.class);
        c.where(builder.equal(root.get(Administrador_.login), admin.getLogin()),
            builder.equal(root.get(Administrador_.senha), admin.getSenha()));
        return !entityManager.createQuery(c).getResultList().isEmpty();
    }

Obs: não codei pela IDE e sim direto aqui no console então pode conter algum erro de sintax, mas acredito estar correto, abração.

Ellyson

agora esta ok, só faltava mesmo o try cach

Criado 26 de abril de 2016
Ultima resposta 27 de abr. de 2016
Respostas 4
Participantes 2