Converter consulta sql em Criteria do Hibernate

2 respostas
F
Oi gente tudo bem, tenho uma aplicação web q uso com hibernate e JSF e gostaria de transformar uma consulta sql comum em uma consulta utilizando o Criteria do hibernate, normalmente faço minhas consultas dessa maneira:
Criteria listagem_query = sessao.createCriteria("br.salesianos.modelo.Usuario").
                    add(Restrictions.eq("usu_id", id));
Porém não sei como fazer a consulta abaixo usando criteria, alguem tem ideia de como posso fazer?
select *
from Usuario, Pessoas, Salesianos
where Usuario.usu_id = 1
and   Usuario.pes_id = Pessoas.pes_id
and   Pessoas.pes_id = Salesianos.pes_id

2 Respostas

F

Segue um exemplo, coloquei as suas classes, acredito que elas estejam criadas ± desta forma, o resultado de execução desta consulta, retorno uma lista de de usuario, que o usuário vai ter um pessoa que por sua vez irá ter um Salesianos.

Obs. os createAlias são opcionais.

public class Usuario {
	private int id;
	private Pessoa pessoa;
}


public class Pessoa{
	private int id;
	private Salesianos salesianos;
}

public class Salesianos{
	private int id;
	
}
final Criteria crit = getSession().createCriteria(Usuario.class);
	  crit.createAlias("pessoa", "pessoa");
	   crit.createAlias("pessoa.salesianos", "salesianos");
	   crit.add(Restrictions.eq("id", 1));

         crit.list();
F

Era quase isso, só que esqueci de dizer uma coisa, o resultado deveria ser uma lista de Salesiano(é o mesmo que Padre),
so q tem uma coisa, minhas classes nao estao mapeadas dessa maneira q vc colocou:

Acho q o mapeamento correto para as minhas classes seria

public class Usuario {
	private int id;
	private Pessoa pessoa;
}


public class Pessoa{
	private int id;	
}

public class Salesianos{
	private int id;	
	private Pessoa pessoa;
}

Desculpe, eu esqueci de colocar as minhas classes modelo , mas ai estao:(to colocando pra ver se esta certo com o q eu escrevi acima)

Usuario

@Entity
public class Usuario implements Serializable {

    @Id
    @SequenceGenerator(name="generator_usuario",sequenceName="sequence_usuario")
    @GeneratedValue(generator="generator_usuario")
    private Integer usu_id;
    
    @Column(length=100)
    private String usu_nome;
    
    @Column(length=100)
    private String usu_tipo;

    @ManyToOne
    @ForeignKey(name="usuario_fkey_pessoas_01")
    @JoinColumn(name="pes_id")
    private Pessoas pessoas;

    @Column(length=100)
    private String usu_senha;

Pessoa

@Entity
public class Pessoas implements Serializable {

    public Pessoas() {
    }

    @Id
    @SequenceGenerator(name="generator_pessoa",sequenceName="sequence_pessoa")
    @GeneratedValue(generator="generator_pessoa")
    private Integer pes_id;

    @ManyToOne
    //@ForeignKey(name="nomeTabela_fkey_nomeAtributo_01")
    @ForeignKey(name="pessoa_fkey_cidade_01")
    //@JoinColumn(name="baseadoNoAtributo")
    @JoinColumn(name="cid_id")
    private Cidade cidade;

    @ManyToOne
    @ForeignKey(name="pessoa_fkey_estado_01")
    @JoinColumn(name="est_id")
    private Estado estado;
        
    @Column(length=100)
    private String pes_prenome;

    @Column(length=100)
    private String pes_nome_meio;

    @Column(length=100)
    private String pes_sobrenome;

    @Column
    private String pes_nome_italiano;

    @Column(length=100)
    private String pes_nome_pais_origem;

    @Column
    @Temporal(TemporalType.DATE)
    private Date pes_data_nascimento;

    @Column(length=100)
    private String pes_rg_num;

    @Column
    @Temporal(TemporalType.DATE)
    private Date pes_rg_dat;

    @Column(length=100)
    private String pes_rg_expedidor;

    @Column
    private Long pes_cpf;

    @Column
    private Long pes_telefone1;

    @Column
    private Long pes_telefone2;

    @Column
    private Long pes_telefone3;
    
    @Column
    private String pes_nome_traduzido;

    @Column
    private String pes_email_pessoal;

    @Column
    private Long pes_cep;

    @Column(length=100)
    private String pes_logradouro;

    @Column(length=100)
    private String pes_bairro;

    @Column(length=100)
    private Long pes_numero;

    @Column(length=100)
    private String pes_complemento;

    @Column(length=100)
    private String pes_nom_completo;

Salesianos

@Entity
public class Salesianos implements Serializable {

    @Id
    @SequenceGenerator(name="generator_salesianos",sequenceName="sequence_salesianos")
    @GeneratedValue(generator="generator_salesianos")
    private Integer sal_id;

    @ManyToOne
    //@ForeignKey(name="nomeTabela_fkey_nomeAtributo_01")
    @ForeignKey(name="salesianos_fkey_pessoas_01")
    //@JoinColumn(name="baseadoNoAtributo")
    @JoinColumn(name="pes_id")
    private Pessoas pessoas;

    @ManyToOne    
    @ForeignKey(name="salesianos_fkey_categoria_01")    
    @JoinColumn(name="cat_id")
    private Categoria categoria;

    @ManyToOne
    @ForeignKey(name="salesianos_fkey_estado_01")
    @JoinColumn(name="est_id")
    private Estado estado;

    //@Lob
    //private byte[] sal_foto;
    
    @Column(length=100)
    private String sal_site;

    @Column(length=100)
    private String sal_email_institucional;

    @Column(length=100)
    private String sal_unimed;

    @Column
    private String sal_titulo_honorifico;

    @Column
    private String sal_hobby;

    @Column
    private String sal_dados_biograficos;

    @Column
    private String sal_apelido;

    @Column
    private String sal_linguas;

    @Column
    @Temporal(TemporalType.DATE)
    private Date sal_data_falecimento;

    @Column
    private String sal_local_falecimento;

    @Column
    private String sal_pais_falecimento;

    @Column
    private String sal_local_enterro;
Criado 18 de agosto de 2011
Ultima resposta 18 de ago. de 2011
Respostas 2
Participantes 2