Multiple Hibernate configs

2020-07-06 08:45发布

I'm currently working on building a library to modularize some of my code and I'm running into a problem with Hibernate.

In my main application I have a hibernate config to get information it needs to run but then I also have a need for hibernate in my library since some of the objects I want could be used in other applications.

When I start up my tomcat server, with both hibernates setup, I get errors stating that beans cannot be resolved and one that says my positional parameters are missing in my query. However, when I start up Tomcat with only the application Hibernate config it starts fine.

Here's what the configs look like...

From the library:

<?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>

And from the application:

<?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>

I'm still pretty new to Hibernate and this is sort of a weird configuration.

2条回答
▲ chillily
2楼-- · 2020-07-06 08:54

if you want to do it propely use hibernate shard 1. Othewise you can simply pass the path (on file system or in classpath ) of the hibernate.cfg.xml you want to use

From the library

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

And from the application:

SessionFactory sf = new Configuration()
        .configure("Fromtheapp.cfg.xml")
        .buildSessionFactory();
查看更多
狗以群分
3楼-- · 2020-07-06 09:14

You can load hibernate configuration files programatically.

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

That would allow you to create two SessionFactory objects. However, I assume that you want to use the same SessionFactory for your app and your module.

You could load both hibernate XML files into a single DOM object (combine your module's "session-factory" tag children with your application's ones) and then use the following code:

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

Edit: session-factory wasn't printed because it had greater-than and less-than characters.

查看更多
登录 后发表回答