【问题标题】:Hibernate auto create databaseHibernate 自动创建数据库
【发布时间】:2014-01-30 22:10:12
【问题描述】:

我有一个 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>

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

根据配置文件,它可能已经这样做了,我不知道。

提前致谢。

【问题讨论】:

    标签: java mysql hibernate jakarta-ee


    【解决方案1】:

    &lt;property name="hibernate.hbm2ddl.auto"&gt;create&lt;/property&gt; 将创建表。但它不会创建数据库。更改连接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>
    

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

    <property name="connection.url">
        jdbc:mysql://localhost/InternetProject?createDatabaseIfNotExist=true&useUnicode=yes&characterEncoding=UTF-8
    </property>
    

    【讨论】:

    • 如果你在属性'password'中输入一个值,是否会自动设置和使用?
    • 是的。休眠会自动执行。
    • 创建数据库时如何设置字符编码?
    • 使用 jdbc:mysql://localhost:3306/footballdb?createDatabaseIfNotExist=true&useUnicode=yes&characterEncoding=UTF-8
    【解决方案2】:

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

    jdbc:mysql://db:3306/mydatabase?createDatabaseIfNotExist=true
    

    【讨论】:

    • 我真的很喜欢这个解决方案,但它对我不起作用。我得到com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
    【解决方案3】:

    自动属性有多种选择。

    1. create - 它创建对应映射或注释的新表。它会删除现有的表和数据。
    2. 更新 - 它保留现有的数据和表格。它更新架构。在这里我们必须照顾合约。
    3. create-drop - 与 create 相同,但一旦会话关闭,它就会删除所有内容。
    4. validate - 它使用地图或注释验证或匹配架构。对生产环境有效。

      <!-- create create-drop validate update -->
      <property name="hbm2ddl.auto">update</property>
      

    希望对你有帮助。

    【讨论】:

      【解决方案4】:
      <property name="hibernate.hbm2ddl.auto">create</property>
      

      会的

      【讨论】:

      • 谢谢!这和&lt;property name="hibernate.hbm2ddl.auto"&gt;update&lt;/property&gt;的区别是什么时候?
      • create 将创建一个新架构,update 将查找架构并进行更新
      • 我可以使用 create 代替 udpate ,还是应该同时使用?
      • 第一次创建就够了,以后改回来更新
      • @yyny:根据我的经验,这不会创建数据库。如果数据库在那里,它将创建表。仅此而已。还有什么办法吗?
      猜你喜欢
      • 2016-11-12
      • 2022-08-12
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      相关资源
      最近更新 更多