Boa tarde damas e cavalheiros,
Não estou conseguindo fazer um Criteria que funcione para o meu problema e depois de muito pesquisar, estou pedindo uma ajuda a vocês.
No meu banco de Dados eu tenho uma tabela de Produtos e uma tabela de Composição dos Produtos, onde a Composição é uma relação muitos para muitos da tabela de Produtos para ela mesma.
Explicando melhor; Um Produto é composto por nenhum ou é composto por vários outros produtos. Assim a tabela composição tem um campo que é o produtoId e o campo itemId formando a chave primária. Tanto produtoId, quanto itemId , são chave estrangeira da tabela de Produtos.
Segue abaixo o mapeamento das tabelas:
Tabela de Produtos
@Entity
@Table(name = "TabProduto")
@Proxy(lazy=false)
public class Produto {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long produtoId;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "categoriaId")
private Categoria categoria;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "unidadeId")
private Unidade unidade;
private String codigo;
private String nome;
private String descricao;
private double estoqueMinimo;
private double estoqueMaximo;
private double quantidade;
private double precoCompra;
private double precoVenda;
private double custoArmazenagem;
private String localArmazenagem;
@Lob
private byte[] imagem;
// getters and setters
}
Tabela de Composição de Produto
@Entity
@Table(name = "TabComposicao")
public class Composicao {
@EmbeddedId
private ComposicaoPk composicaoPk;
private double quantidade;
// getters and setters
}
Classe Chave primária para tabela Composição
@Embeddable
public class ComposicaoPk implements Serializable{
private static final long serialVersionUID = 1L;
@ManyToOne
@JoinColumn(name="produtoId")
private Produto produto;
@ManyToOne
@JoinColumn(name="itemId")
private Produto item;
// getters and setters
}
Eu preciso de criar Criteria do objeto Composição com restrição a um dado Produto, para que sejam listados todos os itens que compõem o Produto em questão.
Abaixo segue uma das tentativas que não funcionaram:
public List<Composicao> tableList(int primeiro, int quantidade, Produto produto){
Criteria c = session.createCriteria(persistentClass);
c.createAlias("produto", "prod");
c.add(Restrictions.eq("prod.produto", produto));
c.setFirstResult(primeiro);
c.setMaxResults(quantidade);
return c.list();
}
Desde já fico muito agradecido aos usuários do GUJ.
Abraços,