2010-06-13 5 views
1

J'ai un simple bean JPanel dans mes projets, maintenant je veux faire glisser ma classe de haricots dans ma jframe.[java bean] hibernate La session casse un bean java?

Ma classe de haricot panneau est comme ceci:

public class BeanPanel extends javax.swing.JPanel { 

/** Creates new form BeanPanel */ 
public BeanPanel() { 
    initComponents(); 
    Session session=HibernateUtil.getSessionFactory().openSession(); 
} 

Ce code semble briser le haricot:

Session session=HibernateUtil.getSessionFactory().openSession(); 

Lorsque je tente de faire glisser la classe dans mon haricot DFrame j'ai eu ce message d'erreur :

Ce composant ne peut pas être instancié. S'il vous plaît assurez-vous que c'est un composant JavaBeans

Si je commente tout fonctionne très bien. Quelle est la raison de ceci?

Merci.

Répondre

1

Ne pas faire un travail coûteux (comme l'ouverture d'une session) dans le constructeur. Au mieux, n'utilisez que des affectations dans le constructeur. Dans votre cas lorsque vous placez le composant, NetBeans appelle son constructeur. Qui ne peut pas se connecter, car probablement les configurations appropriées ne sont pas chargées, ou parce que le chemin de classe est correct, ou quoi que ce soit.

créer un getter et setter pour session, et utiliser l'initialisation paresseuse dans le getter:

public Session getSession() { 
    if (session == null) { 
     HibernateUtils.getSessionFactory().openSession(); 
    } 
} 

Cela dit, je pense que vous pouvez avoir des problèmes avec la gestion des sessions. Peut-être que vous pouvez jeter un oeil à la méthode getCurrentSession() de SessionFactory.

Autre chose: ne mélangez pas l'accès à la base de données et l'interface utilisateur. Déplacez le traitement des données en dehors de vos panneaux.

+0

Merci beaucoup, en fait j'ai lu messages.log et j'ai remarqué que j'ai un hibernatehexcpetion pour lire hibernate.cfg.xml. Donc, je dois faire une classe pour gérer la session et sauvegarder/sélectionner les données? Ce panneau est un panneau simple avec un formulaire pour insérer des données dans ma base de données. – blow

+0

Une autre question, est préférable d'ouvrir la session une fois et après avoir récupéré la session avec getCurrentSession() sans le fermer? – blow

+0

pour lire la documentation de Hibernate, puis poser une autre question ici, si vous ne comprenez pas certaines parties de celui-ci. – Bozho

Questions connexes