2014-01-12 133 views
12

我有一个JavaEE休眠项目,休眠自动创建数据库

而我使用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产生的呢?

根据配置文件,它可能已经做到这一点,我不知道它.. 在此先感谢,:)

回答

9
<property name="hibernate.hbm2ddl.auto">create</property> 

会做

+1

谢谢!这是什么时候和' update''之间的区别? – Billie

+2

创建将创建一个新的架构和更新将查找架构并执行更新 – tesnik03

+1

我可以使用'create'而不是'udpate',或者我应该同时使用? – Billie

5

有多个选项汽车财产。

  1. create - 它创建新的表格相应的映射或注释。它会删除现有的表和数据。
  2. 更新 - 它保留现有的数据和表格。它更新架构。这里我们必须小心谨慎。
  3. 创建 - 删除 - 它与创建相同,但是一旦会话关闭,它就会丢弃所有内容。
  4. 验证 - 它证明或地图或注释匹配模式。它适用于生产环境。

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

我希望它能帮助。

23

<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> 
+0

如果您将属性'password'中的值自动设置并使用? –

+1

是的。休眠会自动完成。 –

5

Hibernate不会为你创建的数据库中,只有表。要创建数据库,您需要通过向URL添加参数来告诉MySQL创建数据库。例如: -

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

我真的很喜欢这个解决方案,但它不适合我。我得到'com.mysql.cj.jdbc.exceptions.CommunicationsException:通信链路故障' – codepleb