Im пытается узнать спящий режим и калитки. Im фактически не уверен, когда нужно открыть и закрыть сеанс спящего режима. Я много искал и много читал о фабрике сеансов, но я все равно не понимаю.Hibernate Обработка сеанса
Я хочу получить некоторые данные из моей базы данных и показать их в таблице в браузере. Это на самом деле работает, если им в первый раз на этом сайте, но если я использую кнопку назад и перейти на этот сайт снова он показывает мне эту ошибку:
Last cause: Unknown service requested [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]
Я думаю, что его, потому что я закрываю SessionFactory рано или что-то как это. Но я не знаю, как решить проблему.
Мои Java Класс:
public class CategoryPanel extends Panel {
private WebMarkupContainer categoryContainer;
public CategoryPanel(String id) {
super(id);
SessionFactory sessionFactory = DbFactory.getSessionFactory(); // creating the Session Factory
StandardDao<Category> categoryDao = StandardDao.getInstance(sessionFactory); // creating dao to access data
List<Category> categoryList = categoryDao.getAll(Category.class); // get data of the db
CategoryDataProvider dataProvider = new CategoryDataProvider(categoryList);
categoryContainer = new WebMarkupContainer("categoryTable");
final DataView dv = new DataView("categoryList", dataProvider) {
@Override
protected void populateItem(Item item) {
final Category category = (Category) item.getModelObject();
final CompoundPropertyModel<Category> categoryModel = new CompoundPropertyModel<Category>(category);
item.add(new Label("catTitle", categoryModel.bind("title")));
}
};
categoryContainer.add(new Label("categoryTitle", Model.of("Titel")));
add(categoryContainer);
sessionFactory.close(); // here I close the factory, this seems to be wrong. I dont know if i close it anyway..
}
}
Мой Dao:
public class StandardDao<T> {
private static StandardDao instance = null;
private static final Object syncObject = new Object();
private SessionFactory sessionFactory;
private StandardDao(SessionFactory session){
this.sessionFactory = session;
}
public static StandardDao getInstance(SessionFactory session) {
if (instance == null) {
synchronized (syncObject) {
if (instance == null) {
instance = new StandardDao(session);
}
}
}
return instance;
}
public List<T> getAll(Class theClass) {
List<T> entity = null;
Session session = sessionFactory.openSession();
try {
entity = session.createCriteria(theClass).list();
} catch (RuntimeException e) {
e.printStackTrace();
}finally {
session.flush();
// if I close the session here, I cant load lazy
}
return entity;
}
}