Metodo de consulta especifico (Hibernate)

2 respostas
robinhodemorais

Boa noite pessoal, gostaria de saber como crio um metodo do hibernate para consultar um objeto especifico do banco de dados, por exemplo...

gostaria de passar o parametro cd_usuario no metodo e ele me retornar somente o codigo, nome, login, cpf e email do usuario especifico...

eu tenho uma classe abstrata com o metodo findAll...mas agora queria um metodo especifico, essa é minha classe:

package services;

import java.lang.reflect.ParameterizedType;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.flex.remoting.RemotingInclude;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.SessionFactoryUtils;

public class AbstractService<T> {

	protected Class<T> classVO = null;
	public HibernateTemplate template;
   
	
	public AbstractService()
	{
		this.classVO = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
	}

	@Autowired
	public void setSessionFactory(SessionFactory sessionFactory)
	{
		template = new HibernateTemplate(sessionFactory);
	}

	@RemotingInclude
	public void add(T t) throws Exception
	{
		this.template.save(t);
	}

	@RemotingInclude
	public void update(T t)
	{
		this.template.update(t);
	}

	@RemotingInclude
	public void del(T t)
	{
		this.template.delete(t);
	}

	@RemotingInclude
	public  List<T> findAll()
	{
		return template.find(String.format("from %s", this.classVO.getName()));
	}
	
	
	@RemotingInclude
	public List<T> findByExample(T t)
	{
		return this.template.findByExample(t);
	}

}

e essa é minha classe CadUsuario

package services;

import java.util.List;

import org.springframework.flex.remoting.RemotingDestination;
import org.springframework.flex.remoting.RemotingInclude;
import org.springframework.stereotype.Service;

import valueObjects.CadUsuarioVO;

@Service("CadUsuarioService")
@RemotingDestination(channels={"my-amf"})
public class CadUsuario extends AbstractService<CadUsuarioVO> {

	@RemotingInclude
	public CadUsuarioVO login(CadUsuarioVO t)
	{
		List<CadUsuarioVO> usuarios = this.findByExample(t);

		if (usuarios.size()==1)
			return usuarios.get(0);

		return null;

	}

	@RemotingInclude
	@Override
	public void add(CadUsuarioVO t) throws Exception
	{
			//Verifica se o usuário já existe através do email
		CadUsuarioVO verificaUsuario = new CadUsuarioVO();
		verificaUsuario.setDs_login(t.getDs_login());
		
		List<CadUsuarioVO> usuarios = this.findByExample(verificaUsuario);
		
		if (usuarios.size()==0)
		{
			super.add(t);
		}
		else
		{
			throw new Exception("Login já cadastrado para outro usuário!");
		}
			
		
	}
	
	
}

Como posso criar esse método ?

2 Respostas

Roselito_Favero_da_S

Dá uma olhada no método do HibernateTemplate chamado findByNamedParam.

Aqui tem os detalhes:

http://docs.spring.io/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateTemplate.html

robinhodemorais

fiz o metodo assim:

@RemotingInclude public List<T> findByGeneric(String query) { return this.template.findByExample(query); }

será que está certo ?

pois estou tentando comunicar com o flex

Criado 23 de setembro de 2013
Ultima resposta 24 de set. de 2013
Respostas 2
Participantes 2