Hibernate Criteria Join

Queria saber se alguém consegue me ajudar com isso…

Eu to tentando a horas e horas fazer um JOIN com Criteria do hibernate… más não achei nenhum exemplo com o mesmo caso que eu…

Preciso fazer a seguinte query que no MySql ficaria ASsim…

SELECT * From DOCUMENT d , Beneficiado b WHERE d.id = b.id_doc AND b.nome LIKE ‘%…%’…

Olhei vários exemplos e eu conseguiria fazer se fosse um join de Beneficiados pra Document… más o que eu quero são todos os registros de Documents que contenham Beneficiados com nome de acordo com o Like…

Queria saber como faço isso com Criteria… Olha os mapeamentos ai…
Ta com Annotations… Será que preciso postar mais alguma coisa?

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Entities;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author Vinicius
 */
@Entity
@Table(name = "beneficiado")
@NamedQueries({@NamedQuery(name = "Beneficiado.findAll", query = "SELECT b FROM Beneficiado b"), @NamedQuery(name = "Beneficiado.findById", query = "SELECT b FROM Beneficiado b WHERE b.id = :id")})
public class Beneficiado implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @Lob
    @Column(name = "nome")
    private String nome;
    @Basic(optional = false)
    @Lob
    @Column(name = "rg")
    private String rg;
    @Basic(optional = false)
    @Lob
    @Column(name = "cargo")
    private String cargo;
    @Basic(optional = false)
    @Lob
    @Column(name = "departamento")
    private String departamento;
    @Basic(optional = false)
    @Lob
    @Column(name = "ramal")
    private String ramal;
    @Basic(optional = false)
    @Lob
    @Column(name = "cc")
    private String cc;
    @Basic(optional = false)
    @Lob
    @Column(name = "planta")
    private String planta;
    @JoinColumn(name = "id_doc", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Document idDoc;

    public Beneficiado() {
    }

    public Beneficiado(Integer id) {
        this.id = id;
    }

    public Beneficiado(Integer id, String nome, String rg, String cargo, String departamento, String ramal, String cc, String planta) {
        this.id = id;
        this.nome = nome;
        this.rg = rg;
        this.cargo = cargo;
        this.departamento = departamento;
        this.ramal = ramal;
        this.cc = cc;
        this.planta = planta;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getRg() {
        return rg;
    }

    public void setRg(String rg) {
        this.rg = rg;
    }

    public String getCargo() {
        return cargo;
    }

    public void setCargo(String cargo) {
        this.cargo = cargo;
    }

    public String getDepartamento() {
        return departamento;
    }

    public void setDepartamento(String departamento) {
        this.departamento = departamento;
    }

    public String getRamal() {
        return ramal;
    }

    public void setRamal(String ramal) {
        this.ramal = ramal;
    }

    public String getCc() {
        return cc;
    }

    public void setCc(String cc) {
        this.cc = cc;
    }

    public String getPlanta() {
        return planta;
    }

    public void setPlanta(String planta) {
        this.planta = planta;
    }

    public Document getIdDoc() {
        return idDoc;
    }

    public void setIdDoc(Document idDoc) {
        this.idDoc = idDoc;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Beneficiado)) {
            return false;
        }
        Beneficiado other = (Beneficiado) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Entities.Beneficiado[id=" + id + "]";
    }

}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Entities;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Vinicius
 */
@Entity
@Table(name = "document")
@NamedQueries({@NamedQuery(name = "Document.findAll", query = "SELECT d FROM Document d"), @NamedQuery(name = "Document.findById", query = "SELECT d FROM Document d WHERE d.id = :id"), @NamedQuery(name = "Document.findByDataCriacao", query = "SELECT d FROM Document d WHERE d.dataCriacao = :dataCriacao"), @NamedQuery(name = "Document.findByHoraCriacao", query = "SELECT d FROM Document d WHERE d.horaCriacao = :horaCriacao")})
public class Document implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private long id;
    @Lob
    @Column(name = "nome_s")
    private String nomeS;
    @Lob
    @Column(name = "ramal_s")
    private String ramalS;
    @Lob
    @Column(name = "dpt_s")
    private String dptS;
    @Lob
    @Column(name = "mail_s")
    private String mailS;
    @Lob
    @Column(name = "nome_g")
    private String nomeG;
    @Lob
    @Column(name = "ramal_g")
    private String ramalG;
    @Lob
    @Column(name = "dpt_g")
    private String dptG;
    @Lob
    @Column(name = "mail_g")
    private String mailG;
    @Lob
    @Column(name = "rede")
    private String rede;
    @Lob
    @Column(name = "outlook_i")
    private String outlookI;
    @Lob
    @Column(name = "internet")
    private String internet;
    @Lob
    @Column(name = "orial")
    private String orial;
    @Lob
    @Column(name = "orial_premium")
    private String orialPremium;
    @Lob
    @Column(name = "gf_alliance")
    private String gfAlliance;
    @Lob
    @Column(name = "sawluz")
    private String sawluz;
    @Lob
    @Column(name = "sintel_cli")
    private String sintelCli;
    @Lob
    @Column(name = "sintel_fornec")
    private String sintelFornec;
    @Lob
    @Column(name = "cadim")
    private String cadim;
    @Lob
    @Column(name = "axalant")
    private String axalant;
    @Lob
    @Column(name = "ronda_ponto")
    private String rondaPonto;
    @Lob
    @Column(name = "ronda_acesso")
    private String rondaAcesso;
    @Lob
    @Column(name = "datamace")
    private String datamace;
    @Lob
    @Column(name = "ccd")
    private String ccd;
    @Lob
    @Column(name = "minitab")
    private String minitab;
    @Lob
    @Column(name = "citrix")
    private String citrix;
    @Lob
    @Column(name = "outros")
    private String outros;
    @Lob
    @Column(name = "revogacao")
    private String revogacao;
    @Lob
    @Column(name = "dir1")
    private String dir1;
    @Lob
    @Column(name = "dir2")
    private String dir2;
    @Lob
    @Column(name = "dir3")
    private String dir3;
    @Lob
    @Column(name = "dir1_tipo")
    private String dir1Tipo;
    @Lob
    @Column(name = "dir2_tipo")
    private String dir2Tipo;
    @Lob
    @Column(name = "dir3_tipo")
    private String dir3Tipo;
    @Lob
    @Column(name = "sap_tipo")
    private String sapTipo;
    @Lob
    @Column(name = "sap_trans")
    private String sapTrans;
    @Lob
    @Column(name = "sap_perfil")
    private String sapPerfil;
    @Lob
    @Column(name = "sap_just")
    private String sapJust;
    @Lob
    @Column(name = "obs")
    private String obs;
    @Lob
    @Column(name = "outlook_e")
    private String outlookE;
    @Lob
    @Column(name = "outros_desc")
    private String outrosDesc;
    @Basic(optional = false)
    @Column(name = "data_criacao")
    @Temporal(TemporalType.DATE)
    private Date dataCriacao;
    @Basic(optional = false)
    @Column(name = "hora_criacao")
    @Temporal(TemporalType.TIME)
    private Date horaCriacao;
    @JoinColumn(name = "id_status", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private StatusDocumento idStatus;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idDoc")
    private List<Beneficiado> beneficiadoList;

    public Document() {
        dataCriacao = new Date(System.currentTimeMillis());
        horaCriacao = new Date(System.currentTimeMillis());
    }

    public Document(Integer id) {
        this.id = id;
        dataCriacao = new Date(System.currentTimeMillis());
        horaCriacao = new Date(System.currentTimeMillis());
    }

    public Document(Integer id, Date dataCriacao, Date horaCriacao) {
        this.id = id;
        this.dataCriacao = dataCriacao;
        this.horaCriacao = horaCriacao;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNomeS() {
        return nomeS;
    }

    public void setNomeS(String nomeS) {
        this.nomeS = nomeS;
    }

    public String getRamalS() {
        return ramalS;
    }

    public void setRamalS(String ramalS) {
        this.ramalS = ramalS;
    }

    public String getDptS() {
        return dptS;
    }

    public void setDptS(String dptS) {
        this.dptS = dptS;
    }

    public String getMailS() {
        return mailS;
    }

    public void setMailS(String mailS) {
        this.mailS = mailS;
    }

    public String getNomeG() {
        return nomeG;
    }

    public void setNomeG(String nomeG) {
        this.nomeG = nomeG;
    }

    public String getRamalG() {
        return ramalG;
    }

    public void setRamalG(String ramalG) {
        this.ramalG = ramalG;
    }

    public String getDptG() {
        return dptG;
    }

    public void setDptG(String dptG) {
        this.dptG = dptG;
    }

    public String getMailG() {
        return mailG;
    }

    public void setMailG(String mailG) {
        this.mailG = mailG;
    }

    public String getRede() {
        return rede;
    }

    public void setRede(String rede) {
        this.rede = rede;
    }

    public String getOutlookI() {
        return outlookI;
    }

    public void setOutlookI(String outlookI) {
        this.outlookI = outlookI;
    }

    public String getInternet() {
        return internet;
    }

    public void setInternet(String internet) {
        this.internet = internet;
    }

    public String getOrial() {
        return orial;
    }

    public void setOrial(String orial) {
        this.orial = orial;
    }

    public String getOrialPremium() {
        return orialPremium;
    }

    public void setOrialPremium(String orialPremium) {
        this.orialPremium = orialPremium;
    }

    public String getGfAlliance() {
        return gfAlliance;
    }

    public void setGfAlliance(String gfAlliance) {
        this.gfAlliance = gfAlliance;
    }

    public String getSawluz() {
        return sawluz;
    }

    public void setSawluz(String sawluz) {
        this.sawluz = sawluz;
    }

    public String getSintelCli() {
        return sintelCli;
    }

    public void setSintelCli(String sintelCli) {
        this.sintelCli = sintelCli;
    }

    public String getSintelFornec() {
        return sintelFornec;
    }

    public void setSintelFornec(String sintelFornec) {
        this.sintelFornec = sintelFornec;
    }

    public String getCadim() {
        return cadim;
    }

    public void setCadim(String cadim) {
        this.cadim = cadim;
    }

    public String getAxalant() {
        return axalant;
    }

    public void setAxalant(String axalant) {
        this.axalant = axalant;
    }

    public String getRondaPonto() {
        return rondaPonto;
    }

    public void setRondaPonto(String rondaPonto) {
        this.rondaPonto = rondaPonto;
    }

    public String getRondaAcesso() {
        return rondaAcesso;
    }

    public void setRondaAcesso(String rondaAcesso) {
        this.rondaAcesso = rondaAcesso;
    }

    public String getDatamace() {
        return datamace;
    }

    public void setDatamace(String datamace) {
        this.datamace = datamace;
    }

    public String getCcd() {
        return ccd;
    }

    public void setCcd(String ccd) {
        this.ccd = ccd;
    }

    public String getMinitab() {
        return minitab;
    }

    public void setMinitab(String minitab) {
        this.minitab = minitab;
    }

    public String getCitrix() {
        return citrix;
    }

    public void setCitrix(String citrix) {
        this.citrix = citrix;
    }

    public String getOutros() {
        return outros;
    }

    public void setOutros(String outros) {
        this.outros = outros;
    }

    public String getRevogacao() {
        return revogacao;
    }

    public void setRevogacao(String revogacao) {
        this.revogacao = revogacao;
    }

    public String getDir1() {
        return dir1;
    }

    public void setDir1(String dir1) {
        this.dir1 = dir1;
    }

    public String getDir2() {
        return dir2;
    }

    public void setDir2(String dir2) {
        this.dir2 = dir2;
    }

    public String getDir3() {
        return dir3;
    }

    public void setDir3(String dir3) {
        this.dir3 = dir3;
    }

    public String getDir1Tipo() {
        return dir1Tipo;
    }

    public void setDir1Tipo(String dir1Tipo) {
        this.dir1Tipo = dir1Tipo;
    }

    public String getDir2Tipo() {
        return dir2Tipo;
    }

    public void setDir2Tipo(String dir2Tipo) {
        this.dir2Tipo = dir2Tipo;
    }

    public String getDir3Tipo() {
        return dir3Tipo;
    }

    public void setDir3Tipo(String dir3Tipo) {
        this.dir3Tipo = dir3Tipo;
    }

    public String getSapTipo() {
        return sapTipo;
    }

    public void setSapTipo(String sapTipo) {
        this.sapTipo = sapTipo;
    }

    public String getSapTrans() {
        return sapTrans;
    }

    public void setSapTrans(String sapTrans) {
        this.sapTrans = sapTrans;
    }

    public String getSapPerfil() {
        return sapPerfil;
    }

    public void setSapPerfil(String sapPerfil) {
        this.sapPerfil = sapPerfil;
    }

    public String getSapJust() {
        return sapJust;
    }

    public void setSapJust(String sapJust) {
        this.sapJust = sapJust;
    }

    public String getObs() {
        return obs;
    }

    public void setObs(String obs) {
        this.obs = obs;
    }

    public String getOutlookE() {
        return outlookE;
    }

    public void setOutlookE(String outlookE) {
        this.outlookE = outlookE;
    }

    public String getOutrosDesc() {
        return outrosDesc;
    }

    public void setOutrosDesc(String outrosDesc) {
        this.outrosDesc = outrosDesc;
    }

    public Date getDataCriacao() {
        return dataCriacao;
    }

    public void setDataCriacao(Date dataCriacao) {
        this.dataCriacao = dataCriacao;
    }

    public Date getHoraCriacao() {
        return horaCriacao;
    }

    public void setHoraCriacao(Date horaCriacao) {
        this.horaCriacao = horaCriacao;
    }

    public StatusDocumento getIdStatus() {
        return idStatus;
    }

    public void setIdStatus(StatusDocumento idStatus) {
        this.idStatus = idStatus;
    }

    public List<Beneficiado> getBeneficiadoList() {
        return beneficiadoList;
    }

    public void setBeneficiadoList(List<Beneficiado> beneficiadoList) {
        this.beneficiadoList = beneficiadoList;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Document)) {
            return false;
        }
        Document other = (Document) object;
        if ((this.id == 0 && other.id != 0) || (this.id != 0 && !(this.id == other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Entities.Document[id=" + id + "]";
    }
}

Ninguém se arrisca?

Talvez assim:

List itens = session.createCriteria(Beneficiado.class) .setFetchMode("idDoc", FetchMode.EAGER) .list();

https://www.hibernate.org/hib_docs/v3/api/org/hibernate/Criteria.html

Nesse caso não vai voltar uma lista de beneficiados?? Eu queria uma Lista de DOcuments onde os beneficiados tivessem um nome LIKE alguma coisa…

Bom dia. Estou iniciando o meu aprendizado em hibernate e deparei-me com a seguinte questão: como fazer para filtar informações em uma tabela (objeto de join) utilizando a critéria?

Seguem as classes:
@Entity
@Table(name=“EMPREGADO”)
public class Empregado implements Serializable{
@Id
Long matricula;
String nome;
@OneToMany
@JoinColumn(name=“matricula” )
List fichaEmpregado;
@OneToMany
@JoinColumn(name=“matricula” )
List dados;

@Entity
@Table(name=“FICHA_FINANCEIRA”)
public class FichaFinanceira {
@Id
int id;
int mes;
int ano;
long matricula;
@OneToMany
@JoinColumn(name=“id_ficha”)
List listaVerbas;

O código para fazer a criteria é o seguinte:
Empregado e;
Criteria c;
e=(Empregado)session.createCriteria(Empregado.class)
.createAlias(“fichaEmpregado”,“f”)
.add(Restrictions.eq(“f.matricula”, matricula))
.add(Restrictions.eq(“f.mes”, mes))
.add(Restrictions.eq(“f.ano”, ano)).uniqueResult();
return e;

Eu quero o empregado de matrícula =, com os dados de ficha financeira para o mês e ano . Quando faço a execução, são retornadas 5 as querys abaixo:
Hibernate: select this_.matricula as matricula0_1_, this_.nome as nome0_1_, f1_.id as id3_0_, f1_.ano as ano3_0_, f1_.matricula as matricula3_0_, f1_.mes as mes3_0_ from EMPREGADO_FINEP this_ inner join FICHA_FINANCEIRA f1_ on this_.matricula=f1_.matricula where f1_.matricula=? and f1_.mes=? and f1_.ano=?

   Hibernate: select dados0_.matricula as matricula1_, dados0_.id_item_empregado as id1_1_, dados0_.id_item_empregado as id1_1_0_, dados0_.matricula as matricula1_0_, dados0_.valor as valor1_0_, dados0_1_.descricao as descricao2_0_, dados0_1_.sigla as sigla2_0_ from DADOS_EMPREGADO dados0_ left outer join ITENS_EMPREGADO dados0_1_ on dados0_.id_item_empregado=dados0_1_.id where dados0_.matricula=?

   [b]Hibernate: select fichaempre0_.matricula as matricula1_, fichaempre0_.id as id1_, fichaempre0_.id as id3_0_, fichaempre0_.ano as ano3_0_, fichaempre0_.matricula as matricula3_0_, fichaempre0_.mes as mes3_0_ from FICHA_FINANCEIRA fichaempre0_ where fichaempre0_.matricula=?[/b]

   Hibernate: select listaverba0_.id_ficha as id2_1_, listaverba0_.codigo_verba as codigo1_1_, listaverba0_.codigo_verba as codigo1_4_0_, listaverba0_.id_ficha as id2_4_0_, listaverba0_.valor as valor4_0_, listaverba0_1_.descricao as descricao5_0_, listaverba0_1_.tipo as tipo5_0_ from FICHA_VERBA listaverba0_ left outer join VERBA listaverba0_1_ on listaverba0_.codigo_verba=listaverba0_1_.codigo where listaverba0_.id_ficha=?

   Hibernate: select listaverba0_.id_ficha as id2_1_, listaverba0_.codigo_verba as codigo1_1_, listaverba0_.codigo_verba as codigo1_4_0_, listaverba0_.id_ficha as id2_4_0_, listaverba0_.valor as valor4_0_, listaverba0_1_.descricao as descricao5_0_, listaverba0_1_.tipo as tipo5_0_ from FICHA_VERBA listaverba0_ left outer join VERBA listaverba0_1_ on listaverba0_.codigo_verba=listaverba0_1_.codigo where listaverba0_.id_ficha=?

Notem que as querys 4 e 5 são geradas em função da terceira. Essa não está com os filtros de mês e ano, o que acarreta o problema.