Я учусь в спящем режиме.В начале все ясно, однако, когда я пытаюсь запустить свое приложение и в основном у меня есть две операции, связанные с сессией, я получаю исключение:
java.lang.IllegalStateException: EntityManagerFactory is closed
Ниже вы можете найти мой класс DBManager, где я использую методыдля добавления экземпляров в БД:
import org.hibernate.Session;
public class DBManager
{
public void addAutor(String name, String lastName, Book book)
{
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Autor autor = new Autor(name,lastName,book);
session.save(autor);
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
}
public Book addBook(int ISBN, String name, String autorName)
{
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Book book = new Book(ISBN,name,autorName);
session.save(book);
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
return book;
}
}
Вот мой класс HibernateUtil для конфигурации сеанса:
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
Configuration configuration = new Configuration();
configuration.addAnnotatedClass(Autor.class);
configuration.addAnnotatedClass(Book.class);
configuration.configure();
StandardServiceRegistryBuilder standardServiceRegistryBuilder = new StandardServiceRegistryBuilder();
standardServiceRegistryBuilder.applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = standardServiceRegistryBuilder.build();
return configuration.buildSessionFactory(serviceRegistry);
}
catch(Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
И, наконец, основной класс:
public class Test
{
public static void main (String args[])
{
DBManager dbManager = new DBManager();
Book book = dbManager.addBook(1,"Hobbit","Tolkien");
dbManager.addAutor("JRR","Tolkien",book);
}
}
Как видите, я просто поставил книгу, а потом попытался поставить Автора.В чем может быть причина исключения из метода secound?Я полагаю, что я делаю что-тонеправильно с закрытием и открытием сессии, однако я не могу понять, что не так.