[Java-бин] Hibernate Сессия ломает Java-бин? - PullRequest
1 голос
/ 13 июня 2010

У меня есть простой боб JPanel в моих проектах, теперь я хочу перетащить свой класс бин панели в мой jframe.

Мой класс 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 Ответ

1 голос
/ 13 июня 2010

Не выполняйте дорогую работу (например, открывая сеанс) в конструкторе. В лучшем случае используйте только назначения в конструкторе. В вашем случае при размещении компонента NetBeans вызывает его конструктор. Который не может подключиться, потому что, вероятно, соответствующие конфигурации не загружены, или потому что путь к классам правильный, или что-то еще.

создайте метод получения и установки для session и используйте ленивую инициализацию в методе получения:

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

Тем не менее, я думаю, что у вас могут быть проблемы с обработкой сеанса. Возможно, вы можете взглянуть на getCurrentSession() метод SessionFactory.

Другое дело - не смешивайте доступ к базе данных и пользовательский интерфейс. Переместите обработку данных за пределы своих панелей.

...