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

1 resposta
O

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:

@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
 }
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();
     }
 }
public class PersonDAO extends AbstractHibernateCommand{
     
     private Session session;
      	...
      @Remotable
      public List consultar(){
                 session = ConnectDB.getInstance();
                    List pessoas = session.createQuery("from Person").list();
                return pessoas;
      }
 }
public class PersonAction {
         ...
          private Person person;
         
         @DataProvider(objectField="person")
         public List consultar(){
                 PersonDAO personDAO = new PersonDAO();
                 return personDAO.consultar();
 	}
 }
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);
         }
 }

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:

1 Resposta

mister_m

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.

Criado 27 de fevereiro de 2007
Ultima resposta 1 de mar. de 2007
Respostas 1
Participantes 2