发现Hibernate4已经将configuration的buildSessionFactory方法已经划线了,说明已经过时了。
后来参看hibernate源码。以及API帮助文档,发现Hibernate4新增了一个接口ServiceRegistry,
所有基于Hibernate的配置或者服务都必须统一向这个ServiceRegistry注册后才能生效。
所以不难看出 Hibernate4的配置入口不再是Configuration对象,而是ServiceRegistry对象,Configuration对象将通过ServiceRegistry对象获取配置信息。
使用了Builder模式创建一个ServiceRegistry对象,可以看到源码org.hibernate.service.ServiceRegistryBuilder这个类。
代码如下:(hibernate4.1.7)
/** * ServiceRegistry是Hibernate4.X新增接口, * 应用于Hibernate的配置或者服务等将统一向这个ServiceRegistry注册后才能生效。 * 所以需要构建一个ServiceRegistry对象,将配置信息向它注册, * 然后Configuration对象根据从这个ServiceRegistry对象中获取配置信息生成SessionFactory。 * Hibernate4的配置入口不再是Configuration对象,而是ServiceRegistry对象, * Configuration对象将通过ServiceRegistry对象获取配置信息。 * hibernate4 源码位置:org.hibernate.service.ServiceRegistryBuilder * 具体可参看hibernate源码。以及API * */
hibernate-cfg.xml
<session-factory> <property name="hibernate.connection.provider_class" >org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/test</property> <property name="connection.username">root</property> <property name="connection.password">test</property> <property name="connection.pool_size">1</property> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <property name="current_session_context_class">thread</property> <property name="javax.persistence.validation.mode">none</property> <property name="show_sql">true</property> <property name="hbm2ddl.auto">update</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.timeout">120</property> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <property name="hibernate.c3p0.acquire_increment">2</property> <property name="myeclipse.connection.profile">entity_table</property> <property name="show_sql">true</property> <mapping class="entity.Activate" /> </session-factory>
GetSessionUtils.java
static{ try { configuration = new Configuration().configure(); serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); }catch(HibernateException e){ e.printStackTrace(); } } public static Session getSession() { Session session = null; if(null==session || false==session.isOpen()){ session = sessionFactory.openSession(); } return session; } public static void closeSession(Session session){ try { if(null!=session && session.isOpen()) session.close(); } catch (HibernateException e) { e.printStackTrace(); } }
春风如贵客,一到便繁华