Hibernate + CRITERIA + DATA

4 respostas
G

Estou tentando fazer um sql e preciso de ajuda. Quero pegar todos menor q a data que to passando que possui o produto 1.

codigo

Date data4 = new Date("11/21/2013");
		DAO<EstoqueEntrada> daoEstoqueEntrada = new DAO<EstoqueEntrada>(EstoqueEntrada.class);
		List<EstoqueEntrada> teste = daoEstoqueEntrada.buscaData("data", data4 , "produto", 1L);
		for(EstoqueEntrada e : teste){
			System.out.println("\n id: " + e.getId());
		}

dao

@SuppressWarnings("unchecked")
	public List<T> buscaData(String colunaData, Date data, String colunaDados, Long dados) {

		session.beginTransaction().begin();

		Criteria c = session.createCriteria(persistentClass);
		c.add(Restrictions.gt(colunaData, data));
		c.add(Restrictions.eq(colunaDados, dados));
		c.add(Restrictions.eq("status", true));

		session.beginTransaction().commit();
		return c.list();
	}

erro

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Hibernate: 
    select
        this_.id as id17_6_,
        this_.balanco_id as balanco6_17_6_,
        this_.data as data17_6_,
        this_.fornecedor_id as fornecedor7_17_6_,
        this_.nf as nf17_6_,
        this_.produto_id as produto8_17_6_,
        this_.qnt as qnt17_6_,
        this_.status as status17_6_,
        estoquebal2_.id as id16_0_,
        estoquebal2_.data as data16_0_,
        estoquebal2_.perca as perca16_0_,
        estoquebal2_.produto_id as produto6_16_0_,
        estoquebal2_.quantidade as quantidade16_0_,
        estoquebal2_.status as status16_0_,
        produto3_.id as id23_1_,
        produto3_.Descricao as Descricao23_1_,
        produto3_.codBarra as codBarra23_1_,
        produto3_.dataCadastro as dataCada4_23_1_,
        produto3_.marca_id as marca7_23_1_,
        produto3_.nome as nome23_1_,
        produto3_.status as status23_1_,
        fornecedor4_.id as id19_2_,
        fornecedor4_.cnpj as cnpj19_2_,
        fornecedor4_.endereco_id as endereco8_19_2_,
        fornecedor4_.nome as nome19_2_,
        fornecedor4_.nomeFantasia as nomeFant4_19_2_,
        fornecedor4_.responsavel as responsa5_19_2_,
        fornecedor4_.status as status19_2_,
        fornecedor4_.telefone as telefone19_2_,
        endereco5_.id as id2_3_,
        endereco5_.bairro as bairro2_3_,
        endereco5_.cidade_id as cidade9_2_3_,
        endereco5_.lougradouro as lougrado3_2_3_,
        endereco5_.numero as numero2_3_,
        endereco5_.obs as obs2_3_,
        endereco5_.rua as rua2_3_,
        endereco5_.status as status2_3_,
        endereco5_.tipoCasa as tipoCasa2_3_,
        produto6_.id as id23_4_,
        produto6_.Descricao as Descricao23_4_,
        produto6_.codBarra as codBarra23_4_,
        produto6_.dataCadastro as dataCada4_23_4_,
        produto6_.marca_id as marca7_23_4_,
        produto6_.nome as nome23_4_,
        produto6_.status as status23_4_,
        produtomar7_.id as id24_5_,
        produtomar7_.nome as nome24_5_,
        produtomar7_.status as status24_5_ 
    from
        sip.EstoqueEntrada this_ 
    left outer join
        sip.EstoqueBalanco estoquebal2_ 
            on this_.balanco_id=estoquebal2_.id 
    left outer join
        sip.Produto produto3_ 
            on estoquebal2_.produto_id=produto3_.id 
    left outer join
        sip.Fornecedor fornecedor4_ 
            on this_.fornecedor_id=fornecedor4_.id 
    left outer join
        sip.Endereco endereco5_ 
            on fornecedor4_.endereco_id=endereco5_.id 
    left outer join
        sip.Produto produto6_ 
            on this_.produto_id=produto6_.id 
    left outer join
        sip.ProdutoMarca produtomar7_ 
            on produto6_.marca_id=produtomar7_.id 
    where
        this_.data>? 
        and this_.produto_id=? 
        and this_.status=?
Exception in thread "main" org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.com.SIP.Garagem.Model.Produto.id
	at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:58)
	at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:206)
	at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3619)
	at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3335)
	at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:204)
	at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:241)
	at org.hibernate.type.EntityType.getIdentifier(EntityType.java:430)
	at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:110)
	at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1728)
	at org.hibernate.loader.Loader.bindParameterValues(Loader.java:1699)
	at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1589)
	at org.hibernate.loader.Loader.doQuery(Loader.java:696)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
	at org.hibernate.loader.Loader.doList(Loader.java:2228)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
	at org.hibernate.loader.Loader.list(Loader.java:2120)
	at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1596)
	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)
	at br.com.SIP.Geral.DAO.DAO.buscaData(DAO.java:264)
	at br.com.SIP.Geral.Util.Testes.comparaData(Testes.java:44)
	at br.com.SIP.Geral.Util.Testes.main(Testes.java:17)
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field br.com.SIP.Garagem.Model.Produto.id to java.lang.Long
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
	at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)
	at sun.reflect.UnsafeObjectFieldAccessorImpl.get(Unknown Source)
	at java.lang.reflect.Field.get(Unknown Source)
	at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:55)
	... 21 more

Estrutura Banco:

CREATE TABLE  `sip`.`estoqueentrada` (
  `id` bigint(20) NOT NULL auto_increment,
  `data` date default NULL,
  `nf` varchar(255) default NULL,
  `qnt` int(11) NOT NULL,
  `status` char(1) NOT NULL,
  `balanco_id` bigint(20) default NULL,
  `fornecedor_id` bigint(20) default NULL,
  `produto_id` bigint(20) default NULL,
  PRIMARY KEY  (`id`),
  KEY `FKA92F10DFF43791AE` (`produto_id`),
  KEY `FKA92F10DF625C9486` (`fornecedor_id`),
  KEY `FKA92F10DF69BFA14E` (`balanco_id`),
  CONSTRAINT `FKA92F10DF625C9486` FOREIGN KEY (`fornecedor_id`) REFERENCES `fornecedor` (`id`),
  CONSTRAINT `FKA92F10DF69BFA14E` FOREIGN KEY (`balanco_id`) REFERENCES `estoquebalanco` (`id`),
  CONSTRAINT `FKA92F10DFF43791AE` FOREIGN KEY (`produto_id`) REFERENCES `produto` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;

alguem ? Obrigado desde já!

4 Respostas

R

Mostre a classe EstoqueEntrada.

G

EstoqueEntrada

@Entity
public class EstoqueEntrada {

	@GeneratedValue
	@Id
	private Long id;

	@ManyToOne
	private Produto produto;

	// notaFiscal
	private String nf;

	@ManyToOne
	private Fornecedor fornecedor;
	
	@ManyToOne
	private EstoqueBalanco balanco;
	
	private int qnt;

	@Temporal(TemporalType.DATE)
	private Date data;

	@Type(type = "true_false")
	private boolean status;

	public Long getId() {
		return id;
	}

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

	public String getNf() {
		return nf;
	}

	public void setNf(String nf) {
		this.nf = nf;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public int getQnt() {
		return qnt;
	}

	public void setQnt(int qnt) {
		this.qnt = qnt;
	}
 

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public boolean isStatus() {
		return status;
	}

	public void setStatus(boolean status) {
		this.status = status;
	}

	
	
	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	
	public EstoqueBalanco getBalanco() {
		return balanco;
	}

	public void setBalanco(EstoqueBalanco balanco) {
		this.balanco = balanco;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((data == null) ? 0 : data.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((nf == null) ? 0 : nf.hashCode());
		result = prime * result + ((produto == null) ? 0 : produto.hashCode());
		result = prime * result + qnt;
		result = prime * result + (status ? 1231 : 1237);
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		EstoqueEntrada other = (EstoqueEntrada) obj;
		if (data == null) {
			if (other.data != null)
				return false;
		} else if (!data.equals(other.data))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (nf == null) {
			if (other.nf != null)
				return false;
		} else if (!nf.equals(other.nf))
			return false;
		if (produto == null) {
			if (other.produto != null)
				return false;
		} else if (!produto.equals(other.produto))
			return false;
		if (qnt != other.qnt)
			return false;
		if (status != other.status)
			return false;
		return true;
	}

	@Override
	public String toString() {
		return getNf();
	}

}

Produto

package br.com.SIP.Garagem.Model;

import java.util.Date;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Type;

@Entity
public class Produto {

	@GeneratedValue
	@Id
	private Long id;
	
	private String nome;
	
	private String Descricao;
	
	private String codBarra;
	
	@Temporal(TemporalType.DATE)
	private Date dataCadastro;
	
	@ManyToOne
	private ProdutoMarca marca;
	 
	@OneToMany(mappedBy = "produto", fetch = FetchType.LAZY)
	private List&lt;EstoqueBalanco&gt; estoqueBalanco;
	
	@OneToMany(mappedBy = "produto", fetch = FetchType.LAZY)
	private List&lt;EstoqueEntrada&gt; estoqueEntrada;
	
	@OneToMany(mappedBy = "produto", fetch = FetchType.LAZY)
	private List&lt;EstoqueSaida&gt; estoqueSaida;
	
	
	@Type(type = "true_false")
	private boolean status;

	public Long getId() {
		return id;
	}

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

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return Descricao;
	}

	public void setDescricao(String descricao) {
		Descricao = descricao;
	}

	public String getCodBarra() {
		return codBarra;
	}

	public void setCodBarra(String codBarra) {
		this.codBarra = codBarra;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public boolean isStatus() {
		return status;
	}

	public void setStatus(boolean status) {
		this.status = status;
	}

	public ProdutoMarca getMarca() {
		return marca;
	}

	public void setMarca(ProdutoMarca marca) {
		this.marca = marca;
	}
 
 
	public List&lt;EstoqueBalanco&gt; getEstoqueBalanco() {
		return estoqueBalanco;
	}

	public void setEstoqueBalanco(List&lt;EstoqueBalanco&gt; estoqueBalanco) {
		this.estoqueBalanco = estoqueBalanco;
	}

 
	public List&lt;EstoqueEntrada&gt; getEstoqueEntrada() {
		return estoqueEntrada;
	}

	public void setEstoqueEntrada(List&lt;EstoqueEntrada&gt; estoqueEntrada) {
		this.estoqueEntrada = estoqueEntrada;
	}

	public List&lt;EstoqueSaida&gt; getEstoqueSaida() {
		return estoqueSaida;
	}

	public void setEstoqueSaida(List&lt;EstoqueSaida&gt; estoqueSaida) {
		this.estoqueSaida = estoqueSaida;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((Descricao == null) ? 0 : Descricao.hashCode());
		result = prime * result
				+ ((codBarra == null) ? 0 : codBarra.hashCode());
		result = prime * result
				+ ((dataCadastro == null) ? 0 : dataCadastro.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((marca == null) ? 0 : marca.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result + (status ? 1231 : 1237);
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Produto other = (Produto) obj;
		if (Descricao == null) {
			if (other.Descricao != null)
				return false;
		} else if (!Descricao.equals(other.Descricao))
			return false;
		if (codBarra == null) {
			if (other.codBarra != null)
				return false;
		} else if (!codBarra.equals(other.codBarra))
			return false;
		if (dataCadastro == null) {
			if (other.dataCadastro != null)
				return false;
		} else if (!dataCadastro.equals(other.dataCadastro))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (marca == null) {
			if (other.marca != null)
				return false;
		} else if (!marca.equals(other.marca))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (status != other.status)
			return false;
		return true;
	}

	@Override
	public String toString() {
		return getNome();
	}
	
	
	
}
R

Faz assim:

daoEstoqueEntrada.buscaData("data", data4 , "produto.id", 1L);
D

Bom, você sabe o que significa cada método do Restrictions?

eq = equals (igual)
lt = less than (menor que)
gt = greater than (maior que)
le = less or equal (menor ou igual a)
ge = greater or equal (maior ou igual a)
idEq = id equals (id igual a)

Quando você diz que quer encontrar todos os registros que possuem o produto1 e cuja data é MENOR QUE a data informada, por qual razão está usando o Restrictions.gt?

Criado 22 de novembro de 2013
Ultima resposta 22 de nov. de 2013
Respostas 4
Participantes 3