[RESOLVIDO] Criteria: Mais uma duvida na criação de Criterias >.<

2 respostas
calel

Na minha aplicação, um usuario pode participar de 1 ou mais grupos.
Preciso fazer um filtro onde usuarios que participem do grupo 1 ou 2 sejam retornados.
Já percebi que essa é uma deficiência minha, vocês teriam textos para indicar sobre como criar Criterias e/ou HQL ?

@Entity class Usuario{ @Id Long id; String nome; @OneToMany @JoinColumn List<Grupo> grupos; }

@Entity class Grupo{ @Id Long id; String descricao; }

2 Respostas

justoeu

Bom dia!!!
é um pouco velho esse topico, mas a pedidos de uma amiga, segue a resposta abaixo.

Para fazer um relacionamento 1 x N vc tem que ter em mente que o relacionamento final, pode gerar 1 ou vários registros. Neste caso seria como um List o retorno.

Primeiramente vc deve fazer o mapeamento, no caso do Hibernate, ou via XML ou via Annotation. No caso do JPA seria via Annotation.

Abaixo eu coloquei um exemplo:

Imaginamos que vc tenha duas tabelas uma de Fornecedor (supplier) e outra de Produtos (product)

o relacionamento é um Fornecedor pode ter 1 ou vários produtos e um produto pode ter 1 fornecedor (1 x N).

Neste caso as classes poderia ser:

public class Product
{
    private int id;
    private Supplier supplier;
    
    private String name;
    private String description;
    private double price;
    
    public Product()
    {
        super();
    }

// Omitido
}

public class Supplier
{
    private int id;
    private String name;
    private List products = new ArrayList();

// omitido

}

Para efetuar o relacionamento fazendo um criteria vc poderia fazer da seguinte forma:

Session session = HibernateUtil.currentSession();
        Criteria crit = session.createCriteria(Supplier.class);
        Criteria prdCrit = crit.createCriteria("products");
        prdCrit.add(Restrictions.gt("price",new Double(25.0)));
        List results = crit.list();
        displaySupplierList(results);

Note que foi feito um Load da Classe “Mandante” e depois fiz uma Segunda Criteria colocando uma restrição GT (GreatThan) (Maior que) para o preço!

e o retorno é a lista dos “Fornecedores”

O Mapeamento em um XML ficaria mais ou menos assim

<hibernate-mapping>
   <class name="Supplier">
      <id name="id" type="int">
         <generator class="increment"/>
      </id>

      <property name="name" type="string"/>
      <bag name="products" inverse="true" cascade="all,delete-orphan">
        <key column="supplierId"/>
        <one-to-many class="Product"/>
      </bag>


   </class>
</hibernate-mapping>

Bem, seria mais ou menos isso com XML no caso de Annotations vc pode fazer um Relacionamento usando um @OneToMany/ @ManyToOne colocando sobre a Lista e sobre o atributo contido dentro da Classe (Supplier e Product)

Para finalizar, produre dar uma “googada” colocando “example of relationship hibernate criteria”.

Existem vários textos que podem lhe auxiliar!

Até Breve

calel

Valew Valmir, foi direto ao ponto que eu precisava.
Valeu pela resposta super detalhada, ajudou muito mesmo ^^

Criado 18 de outubro de 2010
Ultima resposta 19 de out. de 2010
Respostas 2
Participantes 2