2010-06-13 46 views
1

我在我的项目中有一个简单的JPanel bean,现在我想将我的面板bean类拖到我的jframe中。[java bean] hibernate Session会破坏一个java bean吗?

我的面板bean类是这样的:

public class BeanPanel extends javax.swing.JPanel { 

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

此代码似乎打破豆:

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

当我试图将类拖到我的JFrame豆我有这个错误信息:

该组件无法实例化。请确保它是一个JavaBeans组件

如果我评论它一切正常。 这是什么原因?

谢谢。

回答

1

不要在构造函数中进行昂贵的工作(如打开会话)。充其量只能在构造函数中使用赋值。在你放置组件的情况下,NetBeans正在调用它的构造函数。无法连接,因为可能没有加载适当的配置,或者因为classpath是正确的,或者其他什么。

创建一个getter和setter的session,并在吸气使用延迟初始化:

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

这么说,我觉得你可能有会话处理问题。也许你可以看看SessionFactorygetCurrentSession()方法。

另一件事 - 不要混合数据库访问和UI。移动面板外的数据处理。

+0

非常感谢你,事实上我读了messages.log,我注意到我有一个hibernatehexcpetion来读取hibernate.cfg.xml。 那么,我必须做一个类来处理会话和数据保存/选择?这个面板是一个简单的面板,用于在数据库中插入数据。 – blow 2010-06-13 08:51:21

+0

另一个问题,最好打开会话一次,并检索会话getCurrentSession()没有关闭它? – blow 2010-06-13 08:52:19

+0

为读取hibernate的文档,然后在这里问另一个问题,如果你不明白它的一些部分。 – Bozho 2010-06-13 10:05:47