2013-06-26 5 views
0

Я пытаюсь создать схему и таблицы программным путем с помощью hibernate/GWT/Java. Я создал конфигурацию со всеми отображения ресурсов и свойств и т.д. НижеПолучение неизвестного исключения базы данных при создании схемы программно?

Configuration hibConfiguration = new Configuration().configure(configFileDoc); 

, но когда я говорю

SchemaExport schemaExport = new SchemaExport(hibConfiguration); 
schemaExport.create(true, true); 

он бросает исключение, как,

ERROR: HHH000231: Schema export unsuccessful 

    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'testschema' 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
     at com.mysql.jdbc.Util.getInstance(Util.java:386) 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052) 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943) 
     at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113) 
     at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308) 
     at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336) 
     at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369) 
     at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153) 
     at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792) 
     at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
     at sun.reflect.GeneratedConstructorAccessor36.newInstance(Unknown Source) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
     at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381) 
     at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305) 
     at java.sql.DriverManager.getConnection(DriverManager.java:582) 
     at java.sql.DriverManager.getConnection(DriverManager.java:154) 
     at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:193) 
     at org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:55) 
     at org.hibernate.tool.hbm2ddl.DatabaseExporter.<init>(DatabaseExporter.java:52) 
     at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:367) 
     at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) 
     at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) 

мой cfg.xml файл:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.password">passwd</property> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/testSchema</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> 
     <property name="javax.persistence.validation.mode">none</property> 
     <property name="hibernate.temp.use_jdbc_metadata_defaults">false</property> 
     <property name="hibernate.default_entity_mode">dynamic-map</property> 
     <property name="hibernate.hbm2ddl.auto">create</property> 
    </session-factory> 
</hibernate-configuration> 

И если я вручную создал схему, тогда она работает нормально, т. Е. Создает таблицы и столбцы. Но обычно это не создание схемы, невозможно ли создать схему автоматически?

ответ

1

Hibernate не будет создавать схемы динамически ... Вы должны создать его вручную.Я использовал простую связь и инструкцию JDBC для создания схемы, затем SchemaExport выполнит работу по созданию таблиц и полей. Таким образом, нет возможности создать реальную схему с помощью спящего режима. Вы должны создать его вручную.

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
Document configFileDoc = builder.parse(new ByteArrayInputStream(configFileStr.getBytes())); 

Configuration hibConfiguration = new Configuration(); 
hibConfiguration.configure(configFileDoc); 
ArrayList<Document> hbmFileDocs = getHBMFileDocList(); //created the documents of the file string 
for(Document doc : hbmFileDocs) 
     hibConfiguration.addDocument(doc); 

hibConfiguration.buildMappings(); 
Class.forName("com.mysql.jdbc.Driver"); 
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/", "username", "password"); 
stmt = conn.createStatement(); 
String sql = "CREATE DATABASE "+schemaName; 
stmt.executeUpdate(sql); 
SchemaExport schemaExport = new SchemaExport(hibConfiguration); 
schemaExport.create(true, true); 

Это сгенерирует полную схему, это сработало для меня.

0

Вам нужно добавить еще одно свойство в файле конфигурации спящего режима, для автоматического создания базы данных/схемы:

<property name="hibernate.hbm2ddl.auto">create</property> 
+0

Извините, у меня уже было это свойство в cfg.xml, но забыли упомянуть .. просто отредактировал файл. спасибо. все еще дает то же исключение. –

0

Я думаю hibernate создать схему только в случае database создается. Вам необходимо создать базу данных testschema вручную.

Создайте базу данных testschema вручную, а затем запустите приложение спящего режима.

-2

Возможно автоматическое создание схем. Добавьте следующее свойство для вашего Hibernate конфигурации XML:

<property name="hibernate.hbm2ddl.auto">update</property> 

ИЛИ

<prop key="hibernate.hbm2ddl.auto">update</prop> 

В соответствии с указанным выше свойством, Hibernate будет только создать базу данных, если она уже не существует, и будет обновить все существующие таблицы в соответствии с текущей моделью домена.

Другой выбор будет это:

<property name="hibernate.hbm2ddl.auto">create-drop</property> 

выше свойство означает, что Hibernate создает совершенно новую базу данных каждый раз, когда вы запускаете приложение

UPDATE: ПОЛЕЗНЫЕ адреса

http://manikandanmv.wordpress.com/2011/04/13/hibernate-basics-simple-example/

http://khartig.wordpress.com/2008/12/20/dynamic-schema-and-database-creation-with-netbeans-hibernate-and-ejb3/

http://blog.sencide.com/2011/03/hibernate-tutorial-for-beginners.html

http://www.jroller.com/eyallupu/entry/hibernate_s_hbm2ddl_tool

http://hannelita.wordpress.com/2012/03/21/hibernate-cfg-hibernate-4-0-0/

+0

без изменений..это такое же исключение. Я попробовал все варианты. Если вы когда-либо делали то же самое плз, дайте мне полезную статью или сообщение для ссылки. –

+0

@milind_bharambe Проверьте обновление, если оно помогает – ColinWa

+0

Я просмотрел все ссылки, которые вы предоставили, но я не нашел никакого решения, даже если не было никакого примера генерации схемы программно. :( :( Теперь я не нашел способа генерации схемы с помощью программы, поэтому мне сначала нужно сгенерировать схему с использованием JDBC, а затем запустить другой скрипт для генерации таблиц и полей. –