Bom queria pegar todas as vendas que tivessem idUnidadeMedida = 8 - Tentei de varias formas e não consegui eis o meu criteria
public List<Venda> listarVendaAGranel(Date dataInicio, Date dataFim, String... params){
DetachedCriteria criteria = DetachedCriteria.forClass(Venda.class).addOrder(Order.asc("data"));
criteria.setFetchMode("cliente", FetchMode.JOIN);
criteria.setFetchMode("situacaoMovimentacao", FetchMode.JOIN);
criteria.setFetchMode("itemVendas", FetchMode.JOIN);
criteria.setFetchMode("itemVendas.produtoExemplar", FetchMode.JOIN);
criteria.setFetchMode("itemVendas.produtoExemplar.unidadeMedida", FetchMode.JOIN);
criteria.add(Restrictions.or(Restrictions.eq("situacaoMovimentacao.idSituacaoMovimentacao", Short.parseShort("1")),
Restrictions.eq("situacaoMovimentacao.idSituacaoMovimentacao", Short.parseShort("3"))));
if(dataInicio != null){
criteria.add(Restrictions.ge("data", dataInicio));
}
if(dataFim != null){
criteria.add(Restrictions.le("data", dataFim));
}
criteria.setResultTransformer(criteria.DISTINCT_ROOT_ENTITY);
CriteriaInclude.include(criteria, params);
return _VendaRepository.find(criteria);
}
Eis as entidades.
@Entity
@Table(name = "Venda")
public class Venda implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name="idVenda", nullable=false)
private Integer idVenda;
@NotNull(message="O campo data da venda não pode ser nulo.")
@Column(name="data", nullable=false)
@Temporal(TemporalType.TIMESTAMP)
private Date data;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "venda")
@Size(min = 1 , message = "Não foi adicionado nenhum produto na venda.")
private List<ItemVenda> itemVendas;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name ="idCliente" ,referencedColumnName ="idCliente", nullable =true )})
@ForeignKey(name="FK_Venda_Cliente")
private Cliente cliente;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name ="idSituacaoMovimentacao" ,referencedColumnName ="idSituacaoMovimentacao", nullable =false )})
@ForeignKey(name="FK_Venda_SituacaoMovimentacao")
private SituacaoMovimentacao situacaoMovimentacao;
//gets and sets
}
@Entity
@Table(name = "ItemVenda")
public class ItemVenda implements Serializable{
private static final long serialVersionUID = 1L;
@Digits(message="O campo quantidade não é decimal",fraction = 3,integer = 10)
@NotNull(message="O campo quantidade não pode ser vazio.")
@DecimalMin(value = "0.1" ,message = "O campo quantidade deve ser maior que 0")
@Column(name="quantidade", nullable=false,scale =10,precision =3)
private BigDecimal quantidade;
@Digits(message="O campo valor não é decimal",fraction = 2,integer = 10)
@NotNull(message="O campo valor não pode ser vazio.")
@Column(name="valor", nullable=false,scale =10,precision =2)
private BigDecimal valor;
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name ="idProdutoExemplar" ,referencedColumnName ="idProdutoExemplar", nullable =false )})
@ForeignKey(name="FK_ItemVenda_ProdutoExemplar")
private ProdutoExemplar produtoExemplar;
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name ="idVenda" ,referencedColumnName ="idVenda", nullable =false )})
@ForeignKey(name="FK_ItemVenda_Venda")
private Venda venda;
//gets and sets
}
@Entity
@Table(name = "ProdutoExemplar")
public class ProdutoExemplar implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "idProdutoExemplar", nullable = false)
private Integer idProdutoExemplar;
@Column(name = "observacao", nullable = true)
private String observacao;
@Digits(message = "O campo valor não é decimal", fraction = 2, integer = 10)
@NotNull(message = "O campo valor não pode ser nulo.")
@Column(name = "valor", nullable = false, scale = 2, precision = 10)
private BigDecimal valor;
@Size(message = "O campo codigoBarra deve ter no máximo {max} caracteres", min = 0, max = 20)
@Column(name = "codigoBarra", nullable = true, length = 20)
private String codigoBarra;
@Size(message = "O campo imagem deve ter no máximo {max} caracteres", min = 0, max = 200)
@Column(name = "imagem", nullable = true, length = 200)
private String imagem;
@Column(name = "localizacao", nullable = true)
private String localizacao;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "produtoExemplar")
private Set<ItemVenda> itemVendas;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "produtoExemplar")
private Set<ProdutoMovimentacao> produtoMovimentacoes;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "produtoExemplar")
private Set<ItemCompra> itemCompras;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({ @JoinColumn(name = "idUnidadeMedida", referencedColumnName = "idUnidadeMedida", nullable = false) })
@ForeignKey(name = "FK_ProdutoExemplar_UnidadeMedida")
private UnidadeMedida unidadeMedida;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({ @JoinColumn(name = "idProduto", referencedColumnName = "idProduto", nullable = false) })
@ForeignKey(name = "FK_ProdutoExemplar_Produto")
private Produto produto;
//gets and sets
}
@Entity
@Table(name = "UnidadeMedida")
public class UnidadeMedida implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name="idUnidadeMedida", nullable=false)
private Short idUnidadeMedida;
@Size(message="O campo sigla deve ter no máximo {max} caracteres",min = 0,max = 10)
@NotNull(message="O campo sigla não pode ser nulo.")
@NotEmpty(message="O campo sigla deve ser preenchido.")
@Column(name="sigla", nullable=false,length = 10)
private String sigla;
@Size(message="O campo descricao deve ter no máximo {max} caracteres",min = 0,max = 40)
@NotNull(message="O campo descricao não pode ser nulo.")
@NotEmpty(message="O campo descricao deve ser preenchido.")
@Column(name="descricao", nullable=false,length = 40)
private String descricao;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "unidadeMedida")
private List<ProdutoExemplar> produtoExemplares;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "unidadeMedidaDestino")
private List<UnidadeMedidaConversao> unidadeMedidaDestinoConversoes;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "unidadeMedidaOrigem")
private List<UnidadeMedidaConversao> unidadeMedidaOrigemConversoes;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "unidadeMedida")
private List<Produto> produtos;
//gets and sets
}