多休眠配置
问题描述:
我目前正在建立一个库来模块化我的一些代码,并且我遇到了Hibernate的一个问题。多休眠配置
在我的主应用程序中,我有一个hibernate配置来获取它需要运行的信息,但随后我也需要在我的库中使用hibernate,因为我想要的某些对象可以在其他应用程序中使用。
当我启动我的tomcat服务器,同时安装了两个hibernates,我得到错误,指出bean无法解析,并且一个说我的位置参数在我的查询中丢失。但是,当我只用应用程序Hibernate配置启动Tomcat时,它就可以正常启动。
下面介绍一下CONFIGS样子......
从库:
<?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配置文件。
SessionFactory sf = new Configuration().configure("somename.cfg.xml").buildSessionFactory();
这将允许您创建两个SessionFactory对象。不过,我假设你想为你的应用和你的模块使用相同的SessionFactory。
你可以同时加载hibernate的XML文件合并为一个DOM对象(与您的应用程序不耽误您的模块中的“会话工厂”的标签儿),然后使用下面的代码:
import org.hibernate.cfg.Configuration;
// ...
SessionFactory sf = new Configuration().configure(yourDOMObject).buildSessionFactory();
编辑:会话级工厂没有打印,因为它有大于和小于字符。
答
如果你想这样做,应该使用休眠碎片1。在hibernate.cfg.xml中的Othewise你可以简单的传递路径(在文件系统或类路径)要使用
从库
SessionFactory sf = new Configuration()
.configure("Fromthelibrary.cfg.xml")
.buildSessionFactory();
并从应用程序:
SessionFactory sf = new Configuration()
.configure("Fromtheapp.cfg.xml")
.buildSessionFactory();
这似乎是我正在寻找,但让我问这个。让我的图书馆拥有它可以使用的自己的会话工厂会更好吗?还是应该为整个事情建立一个会话工厂?就我的情况而言,似乎多个会议工厂会更合适,但我不知道如果我沿着这条路走下去会不会遇到麻烦。 – Shaded 2010-08-10 14:09:21
说实话,我对Hibernate没有太多的经验。但是,根据您的描述,我认为多个SessionFactory对象似乎适合您的用例,因为它有助于模块化您的代码。但是不要听我说,因为我甚至不知道是否会对性能产生影响,或者有其他麻烦。 – 2010-08-10 14:53:46
感谢您的帮助,我非常确定多种方式。我会用它跑,并希望它不会回来咬我! 再次感谢! – Shaded 2010-08-10 15:03:57