Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > проблема с програмной конфигурайией Hibernate


Автор: H4nter 11.7.2009, 15:25
Всем доброго дня!
Возникла такая проблема. Так как я использую H2 базу данных, то url коннекта является абсолютным, и его необходимо формировать программно. Поэтому часть конфигурации Hibernate я храню в XML а url задаю в программе

Вот конфигурация 
Код

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
         <!--<property name="connection.url">jdbc:h2:file:D:\Projects\Hibernate (samples)\database\base</property>-->
        <property name="connection.driver_class">org.h2.Driver</property>
        <property name="connection.username">sa</property>
        <property name="connection.password"/>
        <property name="hibernate.connection.Charset">cp1251</property>
        <property name="hibernate.connection.CharacterEncoding">cp1251</property>
        <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
        <!--<property name="hibernate.connection.Useunicode">true</property>-->
        <!-- DB schema will be updated if needed -->
        <property name="hbm2ddl.auto">update</property>
        <property name="current_session_context_class">thread</property>
        <mapping class="classes.Actor"/>
        <mapping class="classes.Cast"/>
        <mapping class="classes.Video"/>
    </session-factory>
</hibernate-configuration>


В программе создаю сессию так

Код

AnnotationConfiguration annotation = new AnnotationConfiguration();
annotation.configure("hibernate.cfg.xml");
annotation.setProperty("connection.url","jdbc:h2:file:D:\\Projects\\Hibernate (samples)\\database\\base");
SessionFactory factory =   annotation.buildSessionFactory();



Но при таком подходе возникает следующая ошибка
Код

SEVERE: could not complete schema update
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
    at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:30)
    at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:27)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:127)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:314)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1300)
    at classes.HibernateUtil.<clinit>(HibernateUtil.java:51)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:87)



Не понимаю в чем моя ошибка, судя документации Hibernate метод setProperty служит как раз для того, чтобы программно задать нужные параметры конфигурации, в альтернативу XML. 
Теперь, если раскоментировать строку в XML 
Код

 <!--<property name="connection.url">jdbc:h2:file:D:\Projects\Hibernate (samples)\database\base</property>-->



А код переписать так

Код

AnnotationConfiguration annotation = new AnnotationConfiguration();
annotation.configure("hibernate.cfg.xml");
SessionFactory factory =   annotation.buildSessionFactory();

то все будет работать. Может кто-то сталкивался с подобной проблемой?

Автор: Старовъръ 11.7.2009, 17:38
Так ты сначала устанавливай свойство, а потом вызывай configure().

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)