Java hibernate创建架构(如果不存在mysql)

Java hibernate创建架构(如果不存在mysql),java,mysql,hibernate,spring-mvc,Java,Mysql,Hibernate,Spring Mvc,我正在使用Spring3和Hibernate4 这是我的root-context.xml <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="url" value="jdbc:mysql://localhost:3306/musicstore"></property>

我正在使用Spring3和Hibernate4

这是我的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>
当我在tomcat中部署我的项目时,我希望hibernate将创建不存在的模式。我尝试了hibernate.hbm2ddl.auto=create,但它不起作用

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


提前感谢。

首先回答您的问题:您已经提供的房产应该满足您的要求

   <prop key="hibernate.hbm2ddl.auto">update</prop>
更新
您得到的异常指的是另一个问题。Hibernate无法连接到指定的数据库

请检查您的连接字符串

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

Hibernate要求数据库存在:它不能帮助您创建数据库。如果需要创建数据库,则需要实现在初始化Hibernate之前执行的另一个解决方案

在使用Spring时,以下内容可能对执行初始的“CREATEDATABASE X”语句很有用

显然,您需要确保在初始化SessionFactorybean之前执行初始化

您还可能会定义两个数据源,一个按照mretierer()提供的链接所述配置,即没有定义数据库,由Spring db初始化器bean使用,另一个由Hibernate使用,它引用初始化期间创建的数据库


不知道这些方法是否可行,但看起来是可行的…

我不知道如何以特定于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>

org.hibernate.dialogue.mysqldialogue
3.
50
10
真的
更新

值得注意的是,我对它的工作原理一无所知,因此它可能有一些我不知道的局限性。

Read@Reimeus感谢您的建议,我尝试了hibernate.hbm2ddl.auto=create,但它也不创建数据库模式。请参阅--->我认为的“musicstore”“是数据库名称。因此,如果数据库存在,它应该可以工作。如果mysql中存在数据库模式“musicstore”,则只创建表,但如果数据库不存在,则hibernate将创建数据库“musicstore”。我明白了。看一看:我已经在我的root-context.xml中添加了这个snipet代码,但它不起作用:(thanx对于这个黑客jdbc:mysql://localhost:3306/musicstore?createDatabaseIfNotExist=true
<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>