2014-10-09 6 views
1

Я использую Spring 3 и зимуют 4.зимуют создать схему, если не существует MySQL

Вот мой корневой context.xml

<bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="url" value="jdbc:mysql://localhost:3306/musicstore"></property> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 
     <property name="username" value="root"></property> 
     <property name="password" value="123456"></property> 
    </bean> 


    <bean id="sessionFactory" name="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"></property> 

     <property name="hibernateProperties"> 
      <props>  
       <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> 
       <prop key="hibernate.max_fetch_depth">3</prop> 
       <prop key="hibernate.jdbc.fetch_size">50</prop> 
       <prop key="hibernate.jdbc.batch_size">10</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 

      </props> 
     </property> 
     <property name="packagesToScan" value="domain" /><!-- 
      entity --> 
    </bean> 

И у меня есть это:

WARN : org.hibernate.engine.jdbc.internal.JdbcServicesImpl - HHH000342: Could not obtain connection to query metadata : Unknown database 'musicstore' 

Когда я развертываю свой проект в tomcat, я хочу, чтобы спящий режим создавал схему, если она не существует. Я пробовал hibernate.hbm2ddl.auto = create, но он не работает

Есть ли способ сделать автоматическую схему во время выполнения? Любые предложения были бы полезны: D

Заранее спасибо.

+0

Прочитать http: // stackoverflow.com/questions/438146/hibernate-hbm2ddl-auto-possible-values-and-what-they-do # 1689769 – Reimeus

+0

@Reimeus Спасибо за ваше предложение, я пробовал hibernate.hbm2ddl.auto = create, но он не создает базу данных схема тоже. –

+0

refer ---> http://stackoverflow.com/questions/24632954/why-is-hibernate-not-creating-database-for-mysql – sush

ответ

-1

Сначала ответ на ваш вопрос: имущество, которое вы уже поставили, должно делать то, о чем вы просили.

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

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

Pls проверить строка подключения

<property name="url" value="jdbc:mysql://localhost:3306/musicstore"></property> 
+0

по-моему «музыкальный магазин» - это имя базы данных. поэтому, если база данных существует, она должна работать – mreiterer

+0

. Она просто создает таблицу, если в mysql существует база данных «музыкальный магазин», но я хочу, чтобы hibernate создавал базу данных «музыкальный магазин», если ее не существует. –

+2

Вижу. Взгляните на: http://stackoverflow.com/questions/717436/create-mysql-database-from-java – mreiterer

0

Hibernate требует базы данных, чтобы существовать: он не может помочь вам создать базу данных. Если вам нужно создать базу данных, вам нужно будет реализовать другое решение, которое выполняется до инициализации Hibernate.

Как вы используете Spring, может быть полезным для выполнения начального оператора CREATE DATABASE X.

http://docs.spring.io/spring-framework/docs/3.0.0.RC3/reference/html/ch12s09.html

Вы, очевидно, необходимо обеспечить initailization выполняется перед боб SessionFactory инициализируется.

Вы также вероятно определяете 2 источников данных, один сконфигурированные, изложенные в ссылке, предоставленной mretierer (Create MySQL database from Java), т.е. без каких-либо баз данных, определенной и который используется в весеннем дб инициализатора фасоли и один для использования Hibernate, какие ссылки база данных, созданная во время инициализации.

Понятия не имею, если все это будет работать, но выглядит возможным ...

+0

Я добавил этот код snipet в моем root-context.xml, но он не работает :( \t \t \t

10

Я не знаю, как решить вашу проблему в спящем определенным образом, но классная вещь о MySQL является то, что вы можете (в по крайней мере, при определенных условиях) укажите для самой базы данных, которая будет создана, если она еще не существует через строку соединения, добавив к концу «? createDatabaseIfNotExist = true».

Итак, изменив конфигурацию Spring на следующую, вы должны получить нужные результаты.

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="url" value="jdbc:mysql://localhost:3306/musicstore?createDatabaseIfNotExist=true"></property> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 
    <property name="username" value="root"></property> 
    <property name="password" value="123456"></property> 
</bean> 


<bean id="sessionFactory" name="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"></property> 

    <property name="hibernateProperties"> 
     <props>  
      <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> 
      <prop key="hibernate.max_fetch_depth">3</prop> 
      <prop key="hibernate.jdbc.fetch_size">50</prop> 
      <prop key="hibernate.jdbc.batch_size">10</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 

     </props> 
    </property> 
    <property name="packagesToScan" value="domain" /><!-- 
     entity --> 
</bean> 

Стоит отметить, что я больше ничего об этом не знаю, чем он работает, так что это очень хорошо может иметь ограничения которых я не знаю.

+1

спасибо за этот хак JDBC: MySQL: // локальный: 3306/MusicStore createDatabaseIfNotExist = верно – vvator

Смежные вопросы