学习了一下Hibernate4,写了个“hello world”。结果发现与以往版本的hibernate有所初入,Hibernate的一些API已经进行了改动,比如buildSessionFactory目前已经不建议使用了,转而提供了buildSessionFactory(ServiceRegistry serviceRegistry) 这么一个方法。
那么如何利用这个新的方式来获取sessionFactory呢?Google了之后发现是这么用的
Configuration cfg = new Configuration().configure();
ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(
cfg.getProperties()).buildServiceRegistry();
SessionFactory sf = cfg.buildSessionFactory(sr);
关于ServiceRegistryBuilder的buildServiceRegistry的JAVADOC是这样说明的
public ServiceRegistry buildServiceRegistry()
Build the service registry accounting for all settings and service initiators and services.
Returns:
The built service registry
其实还是不太明白。。
在实践过程中,遇到几个异常。
The content of element type "session-factory" must match "(property*,mapping*,(class-cache|collection-cache)*,event*,listener*)"
这个异常可能是这样的:在session-Factory的子节点中定义的顺序与Hibernate定义的不一致。也就是说需要先定义property,其次是mapping,紧接着class-cache,collection-cache,然后是event,listener。 如果出现这个异常,则可能是你定义的顺序有误。
然后是
org.hibernate.service.jndi.JndiException: Error parsing JNDI name [XXX]
这个的原因是在session-factory中定义了name属性,而dtd中没有定义。 我在建立这个xml的时候是使用eclipse的插件建立的,填了一个sessionFactory的name,于是就出现了这个异常。