我目前正在构建一个库以对我的一些代码进行模块化,并且我遇到了Hibernate的问题。
在我的主应用程序中,我有一个hibernate配置来获取运行所需的信息,但是我的库中也需要hibernate,因为我想要的某些对象可以在其他应用程序中使用。
当我启动两个hibernate设置的tomcat服务器时,出现错误,指出无法解析bean,并且说我的查询中缺少位置参数的bean。但是,当我仅使用应用程序Hibernate config启动Tomcat时,它会正常启动。
这是配置的样子…
从库中:
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <mapping resource="blah.hbm.xml"/> <mapping resource="blargh.hbm.xml"/> <mapping resource="stuff.hbm.xml"/> <mapping resource="junk.hbm.xml"/> <mapping resource="this.hbm.xml"/> </session-factory> </hibernate-configuration>
并从应用程序:
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> <!-- Enable the query cache --> <property name="hibernate.cache.use_query_cache">true</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">false</property> <!-- mapping files --> <mapping resource="appStuff"/> <mapping resource="appBlah"/> <mapping resource="appBlargh"/> <mapping resource="appJunk"/> <mapping resource="appThis"/> </session-factory> </hibernate-configuration>
我对Hibernate还是很陌生,这有点奇怪。
您可以以编程方式加载hibernate配置文件。
SessionFactory sf = new Configuration().configure("somename.cfg.xml").buildSessionFactory();
那将允许您创建两个SessionFactory对象。但是,我假设您想为您的应用程序和模块使用相同的SessionFactory。
您可以将两个hibernateXML文件都加载到单个DOM对象中(将模块的“ session-factory”标记子代与应用程序的子代结合起来),然后使用以下代码:
import org.hibernate.cfg.Configuration; // ... SessionFactory sf = new Configuration().configure(yourDOMObject).buildSessionFactory();
编辑:没有打印session-factory,因为它具有大于和小于字符。