Hibernate自动创建数据库

Bil*_*lie 27 java mysql hibernate java-ee

我有一个Java EE Hibernate项目,我使用MySQL作为数据库.

我希望当我第一次运行项目时,它会自动创建数据库.

这是我的hibernate.cnf.xml:

<?xml version='1.0' encoding='utf-8' ?>

<!DOCTYPE hibernate-configuration PUBLIC
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
      "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >

<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/InternetProject</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        <property name="connection.pool_size">10</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="show_sql">true</property>
        <mapping class="entities.Business" />
        <mapping class="entities.Coupon" />
        <mapping class="entities.User" />
        <mapping class="entities.LastLogin" />
    </session-factory>  
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)

当我第一次在另一台计算机上运行该项目时,如何InternetProject创建数据库?

根据配置文件,它可能已经做到了,我不知道它.

提前致谢.

Aun*_*ein 45

<property name="hibernate.hbm2ddl.auto">create</property> 将创建表.但它不会创建数据库.更改连接URL以生成数据库.

    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost/InternetProject?createDatabaseIfNotExist=true</property>
    <property name="connection.username">root</property>
    <property name="connection.password"></property>
    <property name="connection.pool_size">10</property>
Run Code Online (Sandbox Code Playgroud)

更新:创建数据库时的字符编码

<property name="connection.url">
jdbc:mysql://localhost/InternetProject?createDatabaseIfNotExist=true&useUnicode=yes&characterEncoding=UTF-8
</property>
Run Code Online (Sandbox Code Playgroud)


tes*_*k03 13

<property name="hibernate.hbm2ddl.auto">create</property>
Run Code Online (Sandbox Code Playgroud)

会做

  • @yyny:根据我的经验,这不会创建数据库.如果有数据库,它将创建表.那只是.还有其他方法吗? (7认同)
  • create将创建一个新架构,更新将查找架构并执行更新 (2认同)

Jug*_*hal 6

auto属性有多种选择.

  1. create - 它创建对应映射或注释的新表.它删除了现有的表和数据.
  2. 更新 - 它保留现有数据和表.它更新架构.在这里,我们必须照顾对手.
  3. create-drop - 就像创建一样,但是一旦会话关闭,它就会丢弃所有内容.
  4. validate - 它使用map或annotation验证或匹配模式.它对生产环境有效.

    <!-- create create-drop validate update -->
    <property name="hbm2ddl.auto">update</property>
    
    Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助.


sim*_*mon 6

Hibernate不会为您创建数据库,只为表创建数据库.要创建数据库,您需要通过向URL添加参数来告诉MySQL创建数据库(如果它尚未存在).例如:

jdbc:mysql://db:3306/mydatabase?createDatabaseIfNotExist=true
Run Code Online (Sandbox Code Playgroud)