Custom Query Hibernate

Mi metodo

        public static Tercero BuscarVentasCliente(String clienteNombre){
                Session s = HibernateUtil.getSessionFactory().openSession();
                //Tercero et=new Tercero();
                //try {
                        s.getTransaction().begin();
                        Tercero t = (Tercero) s.createQuery("from Tercero as  t where t.nombre =:tnombre")
                                        .setParameter("tnombre", clienteNombre).uniqueResult();

                        s.getTransaction().commit();
                /*} catch (Exception e) {
                        s.getTransaction().rollback();
                        e.printStackTrace();
                }*/

                return t;
        }

Usando mi metodo en una clase de pruba

               
Tercero t = new CrudTercero().BuscarVentasCliente("JAIME GASPERIN Y ASOCIADOS");
                for(Venta v : t.getVenta()){
                        System.out.println(v.getId());
                }
<code>
Salida de la consulta HQL me estra devolviendo demasiada informacion que no me es necesaria:
solo necesito el objeto Tercero y los objetos ventas.
<code>
Hibernate: select tercero0_.idTercero as idTercero1_, tercero0_.idComision as idComision1_, tercero0_.domicilio as domicilio1_, tercero0_.nombre as nombre1_, tercero0_.telefono as telefono1_, tercero0_.idTipo as idTipo1_ from terceros tercero0_ where tercero0_.nombre=?

Hibernate: select comision0_.idComision as idComision2_0_, comision0_.cantidad as cantidad2_0_, comision0_.nombre as nombre2_0_ from comisiones comision0_ where comision0_.idComision=?

Hibernate: select tipo0_.idTipo as idTipo0_0_, tipo0_.nombre as nombre0_0_ from tipos tipo0_ where tipo0_.idTipo=?

Hibernate: select venta0_.terceros_idTercero as terceros2_1_3_, venta0_.ventas_idVenta as ventas1_3_, venta1_.idVenta as idVenta4_0_, venta1_.idLote as idLote4_0_, venta1_.fecha as fecha4_0_, venta1_.peso as peso4_0_, venta1_.precio as precio4_0_, venta1_.tipo as tipo4_0_, venta1_.total as total4_0_, venta1_.utilidad as utilidad4_0_, venta1_.variedad as variedad4_0_,

campo2_.idLote as idLote5_1_, campo2_.nombre as nombre5_1_, campo2_.terceros_idTercero as terceros3_5_1_, tercero3_.idTercero as idTercero1_2_, tercero3_.idComision as idComision1_2_, tercero3_.domicilio as domicilio1_2_,
tercero3_.nombre as nombre1_2_, tercero3_.telefono as telefono1_2_, tercero3_.idTipo as idTipo1_2_ from ventas_terceros venta0_ inner join ventas venta1_ on venta0_.ventas_idVenta=venta1_.idVenta inner join lotes campo2_ on venta1_.idLote=campo2_.idLote left outer join terceros tercero3_ on campo2_.terceros_idTercero=tercero3_.idTercero where venta0_.terceros_idTercero=?
Hibernate: select tipo0_.idTipo as idTipo0_0_, tipo0_.nombre as nombre0_0_ from tipos tipo0_ where tipo0_.idTipo=?
<code>
a ver si alguien me orienta

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

generación de SQL

Si quieres queries super optimizados que únicamente devuelvan lo que necesitas, mejor usa otra cosa. Hibernate genera SQL como mejor le parece y aunque en general es bastante eficiente, pues está hecho para acomodar la mayoría de los casos. Además como mapea tuplas con objetos, necesita obtener todos los atributos que haya definidos en el mapeo.

Aquí se ve que tus entidades tienen definidas algunas relaciones, que seguramente no están marcadas como Lazy, y por eso el query termina trayendo datos de varias tablas.

FetchTye.Lazy Ok "Necesio un cable xD"

Ya me devuelve menos data seteando el parametro FetchType.Lazy como comentas ezamudios.

El asunto viene que sigue estando lenta esta parde del codigo

        public JComboBox comboBox(){
                if(comboBox==null){

                        comboBox = new JComboBox();
                        CompCliModSegPlano lol = new CompCliModSegPlano(comboBox);
                        lol.execute();
                        comboBox.addActionListener(new ActionListener() {
                                public void actionPerformed(ActionEvent arg0) {
                                                                String cliente =((String)comboBox.getSelectedItem());
                                                                if(cliente!=""){
                                                                //subproceso swingworker para llenarr un jtable
                                                                BackGroundTableCliente bgcli = new BackGroundTableCliente(table, cliente);
                                                                bgcli.execute();

                                                                }
                                }
                        });
                        comboBox.setBounds(209, 27, 237, 27);
                }
                return comboBox;
        }

Aqui pongo la clase BackGroundTableCliente

package org.transacciones.modelo;

import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.SwingWorker;
import javax.swing.table.DefaultTableModel;
import org.transacciones.dominio.Tercero;
import org.transacciones.dominio.Venta;

public class BackGroundTableCliente extends SwingWorker<DefaultTableModel, Object>{
       
        private JTable table;
        private String name;
        String colTercero[]= new String[] {"Folio", "Fecha", "Cliente", "Peso", "Precio", "Total"};
        List<Venta> ven= new ArrayList<Venta>();
        public BackGroundTableCliente(JTable ta, String n){
                this.table=ta;
                this.name = n;
        }
       
        public Tercero clientes(String name){
                //Tercero ter = new CrudTercero().findByName(name);
                Tercero ter = new CrudTercero().BuscarVentasCliente(name);

                return ter;
        }
       
       
        public DefaultTableModel doInBackground() throws Exception{
                DefaultTableModel model;
                //Tercero t = new CrudTercero().findByName(name);
                Tercero t = clientes(this.name);
                //int ventas = tercero().getVenta().size();
                int ventas = t.getVenta().size();
                Object datos[][];
                int i=0;
                if(ventas>0){
                        datos=new Object[ventas][colTercero.length];
                        System.out.println("Si hay compras");
                        for(Venta v: t.getVenta()){
                                datos[i][0]= v.getId();
                                datos[i][1]= v.getFecha();
                                datos[i][2]= t.getNombre() ;
                                datos[i][3]= v.getPeso();
                                datos[i][4]= v.getPrecio();
                                datos[i][5]= v.getTotal();
                                System.out.println(v.getId());
                                i++;
                        }
                        model = new DefaultTableModel(datos,colTercero);
                }else{
                        model = new DefaultTableModel(null,colTercero);
                        System.out.println("No hay compras");
                }
                return model;
               
        }
       
         protected void done() {
                        // TODO Auto-generated method stub
                         try {
                                table.setModel( get());
                        } catch (Exception e) {
                                // TODO: handle exception
                                JOptionPane.showMessageDialog(null, e);
                        }

                }
}