Problemas ao popular uma JTable com dados do BD usando Hibernate + Genesis

Opa…

Estou tentado popular uma JTable com os dados resultantes de uma pesquisa com o Hibernate, após algumas pesquisas no fórum JTable no NetBeans e Hibernate com JTable entre outros tópicos sobre o assunto, vi que para isso talvez seria conveniente dar uma olhada no Genesis, então fui atrás e procurei aprender/entender o mesmo. Após vários testes(quebrar a cabeça e cara) ainda não consegui fazer o que eu queria (popular uma JTable com dados do BD usando Hibernate + Genesis). :cry:

Minhas classes são:

[code]@Entity
@Table(name = “person”)
public class Person implements Serializable {

 @Id @GeneratedValue
 @Column(name = "person_id")
 private Long id;
 
 @Column(name = "age")
 private int age;

 @Column(name = "first_name")
 private String firstName;
 
 @Column(name = "last_name")
 private String lastName;

 //Getters and Setters

}[/code]

[code]public class HibernateUtil {

 private static final SessionFactory sessionFactory;
 static {
     try {
         sessionFactory = new AnnotationConfiguration().buildSessionFactory();
     } catch (Throwable ex) {
     // Log exception!
         throw new ExceptionInInitializerError(ex);
     }
 }
 public static Session getSession() throws HibernateException {
     return sessionFactory.openSession();
 }

}[/code]

[code]public class PersonDAO extends AbstractHibernateCommand{

 private Session session;
  	...
  @Remotable
  public List consultar(){
             session = ConnectDB.getInstance();
                List pessoas = session.createQuery("from Person").list();
            return pessoas;
  }

}[/code]

[code]public class PersonAction {

private Person person;

     @DataProvider(objectField="person")
     public List consultar(){
             PersonDAO personDAO = new PersonDAO();
             return personDAO.consultar();
}

}[/code]

[code]public class ConsultaPerson extends javax.swing.JDialog {

 private JPanel panelCentro;
 private JTable personTable;
 private SwingBinder binder;
 
 
 public ConsultaPerson() {
     	super();
	this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	this.setSize(800,600);
	this.setLocationRelativeTo(null);
	this.setTitle("Consulta de Pessoas");
	setModal(true);
	init();
 }
  
 private void initComponents() {

     setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
     getContentPane().setLayout(layout);
     layout.setHorizontalGroup(
         layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addGap(0, 517, Short.MAX_VALUE)
     );
     layout.setVerticalGroup(
         layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addGap(0, 381, Short.MAX_VALUE)
     );
     pack();
 }                        
 
 private void init(){ // definição dos componentes
	this.getContentPane().setLayout(new BorderLayout());
         PersonAction personAction = new PersonAction();
 
        personAction.consultar();
         
  TableColumnModel columnModel = new DefaultTableColumnModel();
  TableModel model = new DefaultTableModel();

  personTable = new JTable(new DefaultTableModel(new String[] {"Id", "Age", "First Name", "Last Name"}, 0));
  personTable.setName("person");
  personTable.putClientProperty(SwingBinder.COLUMN_NAMES, new String[] {"person_id", "age", "first_name", "last_name"});
  
         panelCentro=new JPanel();

         panelCentro.setVisible(true);
         panelCentro.add(personTable);
         this.getContentPane().add(panelCentro, BorderLayout.CENTER);
     }

}[/code]

Sou iniciante em java e este é meu primeiro uso do JTable + Hibernate + Genesis :oops:
Onde estou errando? Na tela nem chega a mostrar a tabela, mesmo que vazia.

Desde já agradeço!!! :wink:

Olá obattousai,

Desculpe pela demora em responder. Existem alguns problemas com o código que você postou:

[list]AbstractHibernateCommand serve justamente para fazer injeção da Session. Você não precisa injetá-la manualmente.[/list]
[list]O suporte provido out-of-the-box com o genesis é para o Hibernate 2 e não para o 3. Eu postei na lista sobre como integrar JPA com o genesis em modo local[/list]
[list]Você declarou uma variável do tipo SwingBinder, mas não fez o binding na verdade[/list]
[list]Você não precisa chamar o @DataProvider; o genesis faz isso por você[/list]

E, por último, você está tentando fazer muito de uma vez só (usar o backend do genesis + o binding pra um dos casos mais complexos, tabela). Tente fazer as coisas separadamente, de forma mais simples: @Remotable, exemplo com Hibernate 3, binding simples, binding de tabela, e depois integre.

Caso precise de mais informações, outra boa opção além do GUJ é usar a lista de usuários do genesis, onde outras pessoas poderão responder sua dúvida.