多个Hibernate配置

时间:2010-08-10 13:32:50

标签: java hibernate

我正在构建一个库来模块化我的一些代码,而且我遇到了Hibernate的问题。

在我的主应用程序中,我有一个hibernate配置来获取它需要运行的信息但是我还需要在我的库中使用hibernate,因为我想要的一些对象可以用在其他应用程序中。

当我启动我的tomcat服务器时,同时设置了hibernates,我收到错误,指出bean无法解析,并且我的查询中缺少一个说明我的位置参数的错误。但是,当我只使用应用程序Hibernate配置启动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的新手,这是一种奇怪的配置。

2 个答案:

答案 0 :(得分:12)

您可以以编程方式加载hibernate配置文件。

SessionFactory sf = new Configuration().configure("somename.cfg.xml").buildSessionFactory();

这将允许您创建两个SessionFactory对象。但是,我假设您要为您的应用程序和模块使用相同的SessionFactory。

您可以将两个hibernate XML文件加载到一个DOM对象中(将模块的“session-factory”标记子项与您的应用程序的名称相结合),然后使用以下代码:

import org.hibernate.cfg.Configuration;
// ...
SessionFactory sf = new Configuration().configure(yourDOMObject).buildSessionFactory();

编辑:未打印会话工厂,因为它具有大于和小于字符。

答案 1 :(得分:2)

如果你想这样做,请使用hibernate shard 1。你可以简单地传递你想要使用的hibernate.cfg.xml的路径(在文件系统或类路径中)

来自图书馆

SessionFactory sf = new Configuration()
    .configure("Fromthelibrary.cfg.xml")
    .buildSessionFactory();

从应用程序:

SessionFactory sf = new Configuration()
        .configure("Fromtheapp.cfg.xml")
        .buildSessionFactory();