Consultas com Hibernate e a API Criteria – Parte II

Este post foi removido e transferido para a seguinte url:

http://www.mballem.com/post/consultas-com-hibernate-e-a-api-criteria-parte-ii

Anúncios

, , , ,

  1. #1 por rscouto em 04/03/2012 - 1:49

    Excelente artigo, muito claro e simples agradeço muito, sou do mundo .Net e estou aprendendo Java e fazendo meu projeto final utilizando de faculdade com Java, Vraptor e o Hibernete usando a API criteria e o seu artigo me ajudou muito. Vlw mesmo.

    Gostaria de Fazer um pedido de uma serie agora falando de operações de persistencia em geral com relacionamento tipo: remoção em cascata, inserção em relacionamento (Exemplo como associar um telefone a uma pessoa no hibernate), e as outras operações;

  2. #2 por MBallem em 04/03/2012 - 11:00

    Olá rscouto, legal que gostou do artigo.
    Eu tenho no blog alguns outros tutoriais sobre Hibernate, de uma conferida: https://mballem.wordpress.com/category/hibernate-jpa/

  3. #3 por rscouto em 15/04/2012 - 20:38

    MBallem,
    Muito bom seus artigos porem surgiu uma duvida que ainda não consegui sanar. Como vc mostrou no seu artigo nao é necessario criar a classe para representar a tabela associativa, até ai blz, mas se na tabela associativa tivesse um campo proprio e que fosse necessário para a consulta como seria? Exemplo: imagine que vc ao inves de excluir um telefone existisse uma data inicio e data fim no cadastro(Data fim pode ser nula), e vc tivesse que listar os telefones “ativos”, onde a data fim fosse nula (hipotéticamente), como seria possivel sem mapear a tabela “fone_pessoas”? É possivel, caso não como fica o mapeamento de fone e pessoas o que muda?

    Grande abraço.

  4. #4 por MBallem em 15/04/2012 - 23:20

    rscouto, se você tiver qualquer outro campo na tabela associativa, dai vai ter que mapear. Vai precisar criar um entidade para essa tabela e fazer o mapeamento da entidade. Vai tratar como se estivesse trabalhando com entidades 1-N.

    Veja esse Exemplo:
    classe Pessoa você adiciona

    @OneToMany(mappedBy = “pessoa”, targetEntity = TelefonesPessoas.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Collection telefonesPessoas;

    classe Telefone você adiciona

    @OneToMany(mappedBy = “telefone”, targetEntity = TelefonesPessoas.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Collection telefonesPessoas;

    classe TelefonesPessoas você adiciona além dos demais campos os mapeamentos de Pessoa e Telefone
    @ManyToOne
    @JoinColumn(name = “FK_ID_PESSOA”, nullable = false)
    private Pessoa pessoa;

    @ManyToOne
    @JoinColumn(name = “FK_ID_TELEFONE”, nullable = false)
    private Telefone telefone;

  5. #5 por rscouto em 17/04/2012 - 0:21

    Mballem, muito obrigado pela ajuda!
    Esses atributos fetch = Fetch.Lazy e o cascade = CascadeType.all, servem pra que?

    Muito Obrigago mais uma vez!
    Grande Abraço e parabens pelo blog.

  6. #6 por MBallem em 17/04/2012 - 10:19

  7. #7 por Wesley em 29/10/2012 - 9:22

    Cara, eu to precisando fazer uma consulta assim.

    Tabela Produto Empresa
    Tem Cod produto – Cod Empresa
    -> Select *from ProdutoEmpresa where cod_produto=1 cod_empresa=1;
    Usando criteria.
    Pq assim não funciona.

    List consulta =
    session.createCriteria(ProdutoEmpresa.class)
    .setMaxResults(1)
    .addOrder(Order.asc(“preco”))
    .createCriteria(“produto”)
    .add(Restrictions.eq(“id”,id))
    .createCriteria(“empresa”)
    .add(Restrictions.eq(“id”, id))
    .list();
    return consulta;

    Fala que em Produto não tem associação com Empresa.
    Como eu posso fazer para ele pesquisar em ProdutoEmpresa e não em Empresa.

    Muito bom seu tutorial. Está nos favoritos.

  8. #8 por MBallem em 29/10/2012 - 12:01

    Olá Wesley, mas então… Se sua consulta tem que fazer o que o Select faz, não deveria ser assim?

    List consulta =
    session.createCriteria(ProdutoEmpresa.class)
    .setMaxResults(1)
    .addOrder(Order.asc(“preco”))
    .add(Restrictions.eq(“idProduto”,id))
    .add(Restrictions.eq(“idEmpresa”, id))
    .list();
    return consulta;

%d blogueiros gostam disto: