Select hibernate qual a melhor forma

Qual a forma correta de usar um select no hibernate :

fiz dessas duas forma …

String query = "select u from Cadusu u ";

outra forma


String query = "SELECT u FROM Cadusu u left join u.codplano plano ";

no meu Bean

   this.nomeplano = cadusu.getCodplano().getDescplano();

OBS: das duas forma consigo dar o get no plano.

Qual a melhor forma de fazer a 1º ou 2º opcao

minha entidade :


@Entity
@Table(name = "cadusu")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Cadusu.findAll", query = "SELECT c FROM Cadusu c"),
    @NamedQuery(name = "Cadusu.findByCodusu", query = "SELECT c FROM Cadusu c WHERE c.codusu = :codusu"),
    @NamedQuery(name = "Cadusu.findByDigusu", query = "SELECT c FROM Cadusu c WHERE c.digusu = :digusu"),
    @NamedQuery(name = "Cadusu.findByCodbenef", query = "SELECT c FROM Cadusu c WHERE c.codbenef = :codbenef"),
    @NamedQuery(name = "Cadusu.findByNomeusu", query = "SELECT c FROM Cadusu c WHERE c.nomeusu = :nomeusu"),
    @NamedQuery(name = "Cadusu.findByNascusu", query = "SELECT c FROM Cadusu c WHERE c.nascusu = :nascusu"),
    @NamedQuery(name = "Cadusu.findByCpfusu", query = "SELECT c FROM Cadusu c WHERE c.cpfusu = :cpfusu"),
    @NamedQuery(name = "Cadusu.findByRgusu", query = "SELECT c FROM Cadusu c WHERE c.rgusu = :rgusu"),
    @NamedQuery(name = "Cadusu.findByOrgemis", query = "SELECT c FROM Cadusu c WHERE c.orgemis = :orgemis"),
    @NamedQuery(name = "Cadusu.findByDataemidoc", query = "SELECT c FROM Cadusu c WHERE c.dataemidoc = :dataemidoc"),
    @NamedQuery(name = "Cadusu.findBySexousu", query = "SELECT c FROM Cadusu c WHERE c.sexousu = :sexousu"),
    @NamedQuery(name = "Cadusu.findByEstcivusu", query = "SELECT c FROM Cadusu c WHERE c.estcivusu = :estcivusu"),
    @NamedQuery(name = "Cadusu.findByCns", query = "SELECT c FROM Cadusu c WHERE c.cns = :cns"),
    @NamedQuery(name = "Cadusu.findByDecnasc", query = "SELECT c FROM Cadusu c WHERE c.decnasc = :decnasc"),
    @NamedQuery(name = "Cadusu.findByProfissao", query = "SELECT c FROM Cadusu c WHERE c.profissao = :profissao"),
    @NamedQuery(name = "Cadusu.findByPais", query = "SELECT c FROM Cadusu c WHERE c.pais = :pais"),
    @NamedQuery(name = "Cadusu.findByStatus", query = "SELECT c FROM Cadusu c WHERE c.status = :status"),
    @NamedQuery(name = "Cadusu.findByDataini", query = "SELECT c FROM Cadusu c WHERE c.dataini = :dataini"),
    @NamedQuery(name = "Cadusu.findByDatafim", query = "SELECT c FROM Cadusu c WHERE c.datafim = :datafim"),
    @NamedQuery(name = "Cadusu.findByDatacar", query = "SELECT c FROM Cadusu c WHERE c.datacar = :datacar"),
    @NamedQuery(name = "Cadusu.findByCartimp", query = "SELECT c FROM Cadusu c WHERE c.cartimp = :cartimp"),
    @NamedQuery(name = "Cadusu.findByViascart", query = "SELECT c FROM Cadusu c WHERE c.viascart = :viascart"),
    @NamedQuery(name = "Cadusu.findByDataemicart", query = "SELECT c FROM Cadusu c WHERE c.dataemicart = :dataemicart"),
    @NamedQuery(name = "Cadusu.findByDatavalcart", query = "SELECT c FROM Cadusu c WHERE c.datavalcart = :datavalcart"),
    @NamedQuery(name = "Cadusu.findByCodans", query = "SELECT c FROM Cadusu c WHERE c.codans = :codans"),
    @NamedQuery(name = "Cadusu.findByPosans", query = "SELECT c FROM Cadusu c WHERE c.posans = :posans"),
    @NamedQuery(name = "Cadusu.findByCodcco", query = "SELECT c FROM Cadusu c WHERE c.codcco = :codcco"),
    @NamedQuery(name = "Cadusu.findByDatareenvans", query = "SELECT c FROM Cadusu c WHERE c.datareenvans = :datareenvans"),
    @NamedQuery(name = "Cadusu.findByMae", query = "SELECT c FROM Cadusu c WHERE c.mae = :mae"),
    @NamedQuery(name = "Cadusu.findByMotcanc", query = "SELECT c FROM Cadusu c WHERE c.motcanc = :motcanc"),
    @NamedQuery(name = "Cadusu.findByHistorico", query = "SELECT c FROM Cadusu c WHERE c.historico = :historico"),
    @NamedQuery(name = "Cadusu.findByDatacad", query = "SELECT c FROM Cadusu c WHERE c.datacad = :datacad"),
    @NamedQuery(name = "Cadusu.findByEstud", query = "SELECT c FROM Cadusu c WHERE c.estud = :estud"),
    @NamedQuery(name = "Cadusu.findByPis", query = "SELECT c FROM Cadusu c WHERE c.pis = :pis"),
    @NamedQuery(name = "Cadusu.findByCodext", query = "SELECT c FROM Cadusu c WHERE c.codext = :codext"),
    @NamedQuery(name = "Cadusu.findByDataext", query = "SELECT c FROM Cadusu c WHERE c.dataext = :dataext"),
    @NamedQuery(name = "Cadusu.findByStatusext", query = "SELECT c FROM Cadusu c WHERE c.statusext = :statusext"),
    @NamedQuery(name = "Cadusu.findByCodplaport", query = "SELECT c FROM Cadusu c WHERE c.codplaport = :codplaport"),
    @NamedQuery(name = "Cadusu.findByCodbenefant", query = "SELECT c FROM Cadusu c WHERE c.codbenefant = :codbenefant"),
    @NamedQuery(name = "Cadusu.findByDatamigra", query = "SELECT c FROM Cadusu c WHERE c.datamigra = :datamigra"),
    @NamedQuery(name = "Cadusu.findByDatareinc", query = "SELECT c FROM Cadusu c WHERE c.datareinc = :datareinc"),
    @NamedQuery(name = "Cadusu.findByDataexc", query = "SELECT c FROM Cadusu c WHERE c.dataexc = :dataexc"),
    @NamedQuery(name = "Cadusu.findByDataalt", query = "SELECT c FROM Cadusu c WHERE c.dataalt = :dataalt"),
    @NamedQuery(name = "Cadusu.findByCodbar", query = "SELECT c FROM Cadusu c WHERE c.codbar = :codbar"),
    @NamedQuery(name = "Cadusu.findByCaminhofoto", query = "SELECT c FROM Cadusu c WHERE c.caminhofoto = :caminhofoto"),
    @NamedQuery(name = "Cadusu.findByAdesao", query = "SELECT c FROM Cadusu c WHERE c.adesao = :adesao"),
    @NamedQuery(name = "Cadusu.findByPreexist", query = "SELECT c FROM Cadusu c WHERE c.preexist = :preexist"),
    @NamedQuery(name = "Cadusu.findByAviso", query = "SELECT c FROM Cadusu c WHERE c.aviso = :aviso"),
    @NamedQuery(name = "Cadusu.findByBoletousu", query = "SELECT c FROM Cadusu c WHERE c.boletousu = :boletousu"),
    @NamedQuery(name = "Cadusu.findByPlanoant", query = "SELECT c FROM Cadusu c WHERE c.planoant = :planoant"),
    @NamedQuery(name = "Cadusu.findByCarant", query = "SELECT c FROM Cadusu c WHERE c.carant = :carant"),
    @NamedQuery(name = "Cadusu.findByIniciobol", query = "SELECT c FROM Cadusu c WHERE c.iniciobol = :iniciobol"),
    @NamedQuery(name = "Cadusu.findByPagacomi", query = "SELECT c FROM Cadusu c WHERE c.pagacomi = :pagacomi"),
    @NamedQuery(name = "Cadusu.findByTravaidade", query = "SELECT c FROM Cadusu c WHERE c.travaidade = :travaidade"),
    @NamedQuery(name = "Cadusu.findByAutguiaweb", query = "SELECT c FROM Cadusu c WHERE c.autguiaweb = :autguiaweb"),
    @NamedQuery(name = "Cadusu.findByLiberafinanc", query = "SELECT c FROM Cadusu c WHERE c.liberafinanc = :liberafinanc"),
    @NamedQuery(name = "Cadusu.findByLiberacarencia", query = "SELECT c FROM Cadusu c WHERE c.liberacarencia = :liberacarencia"),
    @NamedQuery(name = "Cadusu.findByLiberalimite", query = "SELECT c FROM Cadusu c WHERE c.liberalimite = :liberalimite"),
    @NamedQuery(name = "Cadusu.findByUsucod", query = "SELECT c FROM Cadusu c WHERE c.usucod = :usucod")})
public class Cadusu implements Serializable {
    private static final long serialVersionUID = 1L;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 2)
    @Column(name = "codusu")
    private String codusu;
    @Size(max = 1)
    @Column(name = "digusu")
    private String digusu;
    @Id
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 17)
    @Column(name = "codbenef")
    private String codbenef;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 50)
    @Column(name = "nomeusu")
    private String nomeusu;
    @Column(name = "nascusu")
    @Temporal(TemporalType.DATE)
    private Date nascusu;
    @Size(max = 11)
    @Column(name = "cpfusu")
    private String cpfusu;
    @Size(max = 20)
    @Column(name = "rgusu")
    private String rgusu;
    @Size(max = 60)
    @Column(name = "orgemis")
    private String orgemis;
    @Column(name = "dataemidoc")
    @Temporal(TemporalType.DATE)
    private Date dataemidoc;
    @Size(max = 1)
    @Column(name = "sexousu")
    private String sexousu;
    @Size(max = 15)
    @Column(name = "estcivusu")
    private String estcivusu;
    @Size(max = 15)
    @Column(name = "cns")
    private String cns;
    @Size(max = 11)
    @Column(name = "decnasc")
    private String decnasc;
    @Size(max = 30)
    @Column(name = "profissao")
    private String profissao;
    @Size(max = 30)
    @Column(name = "pais")
    private String pais;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "status")
    private String status;
    @Column(name = "dataini")
    @Temporal(TemporalType.DATE)
    private Date dataini;
    @Column(name = "datafim")
    @Temporal(TemporalType.DATE)
    private Date datafim;
    @Column(name = "datacar")
    @Temporal(TemporalType.DATE)
    private Date datacar;
    @Size(max = 1)
    @Column(name = "cartimp")
    private String cartimp;
    @Column(name = "viascart")
    private Short viascart;
    @Column(name = "dataemicart")
    @Temporal(TemporalType.DATE)
    private Date dataemicart;
    @Column(name = "datavalcart")
    @Temporal(TemporalType.DATE)
    private Date datavalcart;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "codans")
    private String codans;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 15)
    @Column(name = "posans")
    private String posans;
    @Size(max = 12)
    @Column(name = "codcco")
    private String codcco;
    @Column(name = "datareenvans")
    @Temporal(TemporalType.DATE)
    private Date datareenvans;
    @Size(max = 70)
    @Column(name = "mae")
    private String mae;
    @Size(max = 60)
    @Column(name = "motcanc")
    private String motcanc;
    @Size(max = 4000)
    @Column(name = "historico")
    private String historico;
    @Column(name = "datacad")
    @Temporal(TemporalType.DATE)
    private Date datacad;
    @Size(max = 1)
    @Column(name = "estud")
    private String estud;
    @Size(max = 11)
    @Column(name = "pis")
    private String pis;
    @Size(max = 20)
    @Column(name = "codext")
    private String codext;
    @Column(name = "dataext")
    @Temporal(TemporalType.DATE)
    private Date dataext;
    @Size(max = 1)
    @Column(name = "statusext")
    private String statusext;
    @Size(max = 9)
    @Column(name = "codplaport")
    private String codplaport;
    @Size(max = 20)
    @Column(name = "codbenefant")
    private String codbenefant;
    @Column(name = "datamigra")
    @Temporal(TemporalType.DATE)
    private Date datamigra;
    @Column(name = "datareinc")
    @Temporal(TemporalType.DATE)
    private Date datareinc;
    @Column(name = "dataexc")
    @Temporal(TemporalType.DATE)
    private Date dataexc;
    @Column(name = "dataalt")
    @Temporal(TemporalType.DATE)
    private Date dataalt;
    @Size(max = 30)
    @Column(name = "codbar")
    private String codbar;
    @Size(max = 100)
    @Column(name = "caminhofoto")
    private String caminhofoto;
    @Size(max = 1)
    @Column(name = "adesao")
    private String adesao;
    @Size(max = 1)
    @Column(name = "preexist")
    private String preexist;
    @Size(max = 150)
    @Column(name = "aviso")
    private String aviso;
    @Size(max = 1)
    @Column(name = "boletousu")
    private String boletousu;
    @Size(max = 4)
    @Column(name = "planoant")
    private String planoant;
    @Size(max = 4)
    @Column(name = "carant")
    private String carant;
    @Column(name = "iniciobol")
    @Temporal(TemporalType.DATE)
    private Date iniciobol;
    @Size(max = 1)
    @Column(name = "pagacomi")
    private String pagacomi;
    @Column(name = "travaidade")
    private Integer travaidade;
    @Size(max = 1)
    @Column(name = "autguiaweb")
    private String autguiaweb;
    @Size(max = 1)
    @Column(name = "liberafinanc")
    private String liberafinanc;
    @Size(max = 1)
    @Column(name = "liberacarencia")
    private String liberacarencia;
    @Size(max = 1)
    @Column(name = "liberalimite")
    private String liberalimite;
    @Size(max = 4)
    @Column(name = "usucod")
    private String usucod;
    @JoinColumn(name = "codvend", referencedColumnName = "codvend")
    @ManyToOne
    private Cadvend codvend;
    @JoinColumn(name = "codtabpreco", referencedColumnName = "codtabpreco")
    @ManyToOne
    private Cadtabpreco codtabpreco;
    @JoinColumn(name = "codplano", referencedColumnName = "codplano")
    @ManyToOne
    private Cadplano codplano;
    @JoinColumn(name = "codgraudep", referencedColumnName = "codgraudep")
    @ManyToOne
    private Cadgraudep codgraudep;
    @JoinColumn(name = "coddesconto", referencedColumnName = "coddesconto")
    @ManyToOne
    private Caddesconto coddesconto;
    @JoinColumn(name = "codtit", referencedColumnName = "codtit")
    @ManyToOne(optional = false)
    private Cadcont codtit;
    @JoinColumn(name = "codcbo", referencedColumnName = "codcbo")
    @ManyToOne
    private Cadcbo codcbo;
    @JoinColumn(name = "codcar", referencedColumnName = "codcar")
    @ManyToOne
    private Cadcarenc codcar;

    public Cadusu() {
    }

    public Cadusu(String codbenef) {
        this.codbenef = codbenef;
    }

    public Cadusu(String codbenef, String codusu, String nomeusu, String status, String codans, String posans) {
        this.codbenef = codbenef;
        this.codusu = codusu;
        this.nomeusu = nomeusu;
        this.status = status;
        this.codans = codans;
        this.posans = posans;
    }


getter's e setter's


Como a relação de CadUsu para CodPlano e ManyToOne, o tipo de fetch entre as duas entidades é EAGER, istoé, sempre que você selecionar um CadUsu, o CadPlano será buscado do banco também. Já o contrário não é verdade, se você selecionar um CadPlano, a coleção de CadUsu não será buscada do banco por padrão, só se o relacionamento declarado na CadPlano estiver anotado com EAGER (o que não é muito recomendado), ou se no SELECT você usar JOIN FETCH.

O primeiro SELECT, na minha opinião, é o mais correto nesse caso. Usar LEFT JOIN só fará alguma diferença se você colocar alguma WHERE condition para filtrar os resultados, exemplo:

select u CadUsu u
left join CadPlano u.codplano plano
where plano.nome like ‘%:busca%’

uma dica para ficar melhor a visualização das querys e centralizada
já ouviu falar em um arquivo chamado orm.xml ??