В настоящее время я работаю над созданием библиотеки для модульной части моего кода, и у меня возникла проблема с Hibernate.
В В моем основном приложении у меня есть конфигурация hibernate для получения информации, которая должна быть запущена, но затем мне также нужен hibernate в моей библиотеке, поскольку некоторые объекты, которые я хочу, могут быть использованы в других приложениях.
Когда я запускаю свой tomcat На сервере с настройкой обоих спящих я получаю сообщения о том, что bean-компоненты не могут быть разрешены, и сообщение о том, что в моем запросе отсутствуют мои позиционные параметры. Однако, когда я запускаю Tomcat только с конфигурацией приложения Hibernate, она запускается нормально.
Вот как выглядят эти конфиги ...
Из библиотеки:
<?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>
I ' Я все еще довольно новичок в Hibernate, и это довольно странная конфигурация.
Вы можете загружать файлы конфигурации гибернации программно.
SessionFactory sf = new Configuration().configure("somename.cfg.xml").buildSessionFactory();
Это позволит вам создать два объекта SessionFactory. Однако я предполагаю, что вы хотите использовать одну и ту же SessionFactory для своего приложения и своего модуля.
Вы можете загрузить оба XML-файла гибернации в один объект DOM (объединить дочерние теги тега session-factory вашего модуля с тегами вашего приложения), а затем использовать следующий код:
import org.hibernate.cfg.Configuration;
// ...
SessionFactory sf = new Configuration().configure(yourDOMObject).buildSessionFactory();
Изменить: session-factory не был напечатан потому что в нем были символы «больше» и «меньше».
если вы хотите сделать это, используйте hibernate shard 1. В противном случае вы можете просто передать путь (в файловой системе или в classpath) к hibernate.cfg.xml, который вы хотите использовать
Из библиотеки
SessionFactory sf = new Configuration()
.configure("Fromthelibrary.cfg.xml")
.buildSessionFactory();
И из приложения:
SessionFactory sf = new Configuration()
.configure("Fromtheapp.cfg.xml")
.buildSessionFactory();