作为最佳实践,您需要使用会话工厂。这是 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 研究自动会话/事务管理。一旦配置正确,它将在幕后处理会话。
编辑:
只需重新阅读您的问题和关于 ID 的观点。我相信 sessionfactory 方法将适用于您的目的,除非您正在执行多线程应用程序。这是因为默认情况下,Hibernate 会话和链接到该会话的 ORM 对象仅与一个线程相关联。让我知道我是否错了。