Всем доброго дня! Возникла такая проблема. Так как я использую 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();
|
то все будет работать. Может кто-то сталкивался с подобной проблемой? |