[RESOLVIDO] Criteria Hibernate

6 respostas
bglbruno

Olá pessoal.

Tenho uma tabela na base de dados chamada Material
Cada material tem um Sub-grupo, que por sua vez tem um Grupo.

Eu preciso trazer todos os registros da tabela Material que sejam de um determinado Grupo. E eu só tenho o nome do grupo em mãos.

Minha classe MaterialDAO

@Component
public class MaterialDAO implements RepositoryMaterial {
	private Session session;

	public MaterialDAO(Session session) {
		this.session = session;
	}

	public List<Material> listaPorTipo(String tipo) {
		Criteria crit = this.session.createCriteria(Material.class);

		/*.. Não sei como prosseguir..*/

		return null;
	}

}

Minha classe Material

@Entity
public class Material {
	
	@Id @GeneratedValue
	private long idMaterial;
	
	@OneToOne
	@JoinColumn(name="idSubGrupo")
	private SubGrupoMaterial subgrupo;
	
	private boolean estocavel;
	private String descricao;
	private String fabricante;
	private String marca;
	private String modelo;
	
	private String unidadeMedida;
	private BigDecimal custoPadrao;

	/*Getters e setters */

}

Alguém pode me ajudar ?

6 Respostas

aquino.vale
@Component  
public class MaterialDAO implements RepositoryMaterial {  
    private Session session;  
  
    public MaterialDAO(Session session) {  
        this.session = session;  
    }  
  
    public List<Material> listaPorTipo(String tipo) {  
        Criteria crit = this.session.createCriteria(Material.class);  
  
        /*.. Não sei como prosseguir..*/  

       crit.add(restrictions.eq("nome do campo", tipo));

       crit.list();
  
        return null;  
    }

Cara não entendi muito bem o q vc queria mas para continuar com a consulta criteria vc usa o .add e detro vc joga a restrictions. (eq/in/between/) e etc…depois e so chamar usando o list()…espero ter ajudado…

bglbruno
aquino.vale:
@Component  
public class MaterialDAO implements RepositoryMaterial {  
    private Session session;  
  
    public MaterialDAO(Session session) {  
        this.session = session;  
    }  
  
    public List<Material> listaPorTipo(String tipo) {  
        Criteria crit = this.session.createCriteria(Material.class);  
  
        /*.. Não sei como prosseguir..*/  

       crit.add(restrictions.eq("nome do campo", tipo));

       crit.list();
  
        return null;  
    }

Cara não entendi muito bem o q vc queria mas para continuar com a consulta criteria vc usa o .add e detro vc joga a restrictions. (eq/in/between/) e etc....depois e so chamar usando o list()....espero ter ajudado...

Olá Aquino !

Disso eu sei.
A minha dúvida é como eu relaciono o subgrupo com o grupo. Porque vou ter que pesquisar pelo nome do Grupo
Algo assim

public List<Material> listaPorTipo(String tipo) {
	Criteria crit = this.session.createCriteria(Material.class);
	crit.add(Restrictions.eq("subGrupo.idGrupo.nome", tipo));
	return crit.list();
}
Mas, isso está errado. Pois da o seguinte erro
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: org.hibernate.QueryException: could not resolve property: subGrupo of: br.com.nextrans.erp.modelo.Material
J
Boa tarde eu resolvi um problema semelhante desta forma:

@Entity

public class Pedido {

@GeneratedValue

@Id

private Long AC88_SEQUENC;

@OneToOne

private Representante Rep;
ManoJava

Boa tarde!

Experimenta isso antes de tentar aplicar as restrições

crit.addFetch(QueryObject.innerJoin("subGrupo"));

Primeiro deve-se criar a relação para depois restringir os resultados.

Att.

RicardoYukito

Tente :

Criteria c = session.createCriteria(Material.class ,"material"); c.createAlias("material.subgrupo", "subgrupo"); c.createAlias("subgrupo.grupo", "grupo"); c.add(Restrictions.eq("grupo.nome", "nome"));

se nao funcionar, use c.createCriteria no lugar de alias. e verifique a sintaxe do codigo acima que fiz na mão aqui. flws

bglbruno

Olá Ricardo, funcionou do primeiro modo que falou :slight_smile:

Obrigado!
Obrigado a todos.

Abraço.

Criado 29 de agosto de 2011
Ultima resposta 31 de ago. de 2011
Respostas 6
Participantes 5