ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 1.2.5\. 启动和辅助类 是时候来加载和储存一些`Event`对象了,但首先我们得编写一些基础的代码以完成设置。我们必须启动Hibernate,此过程包括创建一个全局的`SessoinFactory`,并把它储存在应用程序代码容易访问的地方。`SessionFactory`可以创建并打开新的`Session`。一个`Session`代表一个单线程的单元操作,`SessionFactory`则是个线程安全的全局对象,只需要被实例化一次。 我们将创建一个`HibernateUtil`辅助类(helper class)来负责启动Hibernate和更方便地操作`SessionFactory`。让我们来看一下它的实现: ``` package util; import org.hibernate.*; import org.hibernate.cfg.*; public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { // Create the SessionFactory from hibernate.cfg.xml sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } } ``` 这个类不但在它的静态初始化过程(仅当加载这个类的时候被JVM执行一次)中产生全局的`SessionFactory`,而且隐藏了它使用了静态singleton的事实。它也可能在应用程序服务器中的JNDI查找`SessionFactory`。 如果你在配置文件中给`SessionFactory`一个名字,在`SessionFactory`创建后,Hibernate会试着把它绑定到JNDI。要完全避免这样的代码,你也可以使用JMX部署,让具有JMX能力的容器来实例化`HibernateService`并把它绑定到JNDI。这些高级可选项在后面的章节中会讨论到。 把`HibernateUtil.java`放在开发目录的源代码路径下,与放`events`的包并列: ``` . +lib <Hibernate and third-party libraries> +src +events Event.java Event.hbm.xml +util HibernateUtil.java hibernate.cfg.xml +data build.xml ``` 再次编译这个应用程序应该不会有问题。最后我们需要配置一个日志(logging)系统 - Hibernate使用通用日志接口,允许你在Log4j和JDK 1.4 日志之间进行选择。多数开发者更喜欢Log4j:从Hibernate的发布包中(它在`etc/`目录下)拷贝`log4j.properties`到你的`src`目录,与`hibernate.cfg.xml`.放在一起。看一下配置示例,如果你希望看到更加详细的输出信息,你可以修改配置。默认情况下,只有Hibernate的启动信息才会显示在标准输出上。 示例的基本框架完成了 - 现在我们可以用Hibernate来做些真正的工作。