Duvidas com Criteria

Salve galera,

Seguinte, estou usando Criteria nas minhas consultas.
abaixo o meu codigo
Classe Trasmissao

@Entity
@Table(name = "transmissao")
public class Transmissao implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idtransmissao")
    private Integer id;

    
    @Column(name = "descricao")
    private String descricao;

    @JoinColumn(name = "equipamento_idequipamento", referencedColumnName = "idequipamento")
    @ManyToOne(optional = false)
    private Equipamento equipamento;
    
    //GET's e SET's
}

Classe Equipamento

@Entity
@Table(name = "equipamento")
public class Equipamento implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idequipamento")
    private Integer id;
  
    @Column(name = "descricao")
    private String descricao;
    
    @JoinColumn(name = "modelo_idmodelo", referencedColumnName = "idmodelo")
    @ManyToOne(optional = false)
    private Modelo modelo;

    //GET's e SET's
}

Classe Modelo

@Entity
@Table(name = "modelo")
public class Modelo implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idmodelo")
    private Integer id;
  
    @Column(name = "descricao")
    private String descricao;

    //GET's e SET"s
}

Muito bem, eu quero fazer a seguinte pesquisa,
Pesquisar na tabela transmisao pelo modelo do equipamento, onde cada equipamento há um modelo.

Estou fazendo da seguinte maneira:

Criteria criteria =  session.createCriteria(Transmissao.class);
criteria.add(Restrictions.eq("equipamento.modelo.id", equipamento.getModelo().getId()));
criteria.list();

Quando rodo a minha aplicação esta dando um erro dizendo que nao não achou o metodo “equipamento.modelo.id”.

Como que eu faço para realizar essa consulta.

Se fosse em HQL a minha consulta ficaria assim:

 String hql = "select o from Transmissao as o where o.equipamento.modelo.id = :idModelo";

Valeu mais uma vez galera.

Jovem,

Você está no caminho certo apenas se esqueceu de informar alias da tabela transmissão e o left join com a tabela equipamento.

Criteria criteria =  session.createCriteria(Transmissao.class, "transmissao"); // Alias para tabela transmissao
criteria.createAlias("transmissao.equipamento", "equipamento", Criteria.LEFT_JOIN); // left join entre transmissao e equipamento
criteria.add(Restrictions.eq("equipamento.modelo.id", equipamento.getModelo().getId()));  
criteria.list();

Creio com este código resolvar o seu problema.

abs,

valeu Kanin

vou usar seu exemplo em uma aplicação JPA…

mas o criteria do hibernate é mais bonito

Galera,

Depois que eu postei a duvida, fiquei mexendo no meu codigo.
Consegui da seguinte maneira, não sei se é o melhor jeito de fazer, mas deu certo.

Criteria criteria =  session.createCriteria(Transmissao.class);
Criteria  criteriaEquipamento = criteria.createCriteria("equipamento");
Criteria  criteriaModelo = criteriaEquipamento.createCriteria("modelo");
criteriaModelo.add(Restrictions.eq("id", equipamento.getModelo().getId()));
criteria.list();

Funcinou, como eu disse, não sei se é a melhor opção.

Att

Jovem,
Por gentileza coloque como [Resolvido].

abs,

Salve galera,

Agora estou com outro problema, eu queria agrupar as minhas transmissoes por descricao do equipamento.

Não estou conseguindo:

 criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("equipamento"), "equipamento"));

Quando rodo com o codigo acima ele esta trazendo somente a lista de equipamentos e nao esta trazendo as minhas transmissoes.

Value mais uma vez galera