如果不存在mysql,则hibernate创建模式

Nes*_*yen 2 java mysql hibernate spring-mvc

我正在使用Spring 3和hibernate 4.

这是我的root-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>
Run Code Online (Sandbox Code Playgroud)

我有这个:

WARN : org.hibernate.engine.jdbc.internal.JdbcServicesImpl - HHH000342: Could not obtain connection to query metadata : Unknown database 'musicstore'
Run Code Online (Sandbox Code Playgroud)

当我在tomcat中部署我的项目时,我希望hibernate会在不存在的情况下创建模式.我试过hibernate.hbm2ddl.auto = create但它没有用

有没有办法在运行时自动创建架构?任何建议都会有所帮助:D

提前致谢.

Bre*_*gan 17

我不知道如何解决你的问题,在一个Hibernate特定的方式,但关于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>
Run Code Online (Sandbox Code Playgroud)

值得注意的是,我对这一点的了解不多于它的工作原理,所以它很可能具有我不知道的局限性.

  • 感谢这个 hack jdbc:mysql://localhost:3306/musicstore?createDatabaseIfNotExist=true (4认同)