Лучше всего использовать фабрику сессий. Вот то, что генерирует Netbeans.
public class HibernateUtil {
private static final SessionFactory sessionFactory;
private static final Configuration configuration = new Configuration().configure();
static {
try {
// Create the SessionFactory from standard (hibernate.cfg.xml)
// config file.
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Log the exception.
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Получив этот код, вы можете использовать этот код для транзакции
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
//Do something
session.getTransaction().commit();
Обратите внимание, что открытие транзакции откроет сеанс. Я полагаю, что в чистом Hibernate (в отличие от JPA) вам нужна транзакция, чтобы что-то делать, даже читать.
В конце программы вы хотите убедиться, что вы делаете это
HibernateUtil.getSessionFactory().close();
Для более изощренного решения вам может понадобиться автоматическое управление сессиями / транзакциями с помощью Spring или EJB. Который будет обрабатывать сеанс за сценой после того, как настроен правильно.
EDIT:
Просто перечитайте свой вопрос и свою точку зрения об идентификаторах. Я считаю, что сессионный подход будет работать для ваших целей, если только вы не создаете многопоточное приложение. Это связано с тем, что по умолчанию сеансы Hibernate и объекты ORM, связанные с этим сеансом, связаны только с одним потоком. Дайте мне знать, если я ошибаюсь по этому поводу.