如果 mysql 不存在 Hibernate 4 和 spring 4,则不会自动创建模式
Posted
技术标签:
【中文标题】如果 mysql 不存在 Hibernate 4 和 spring 4,则不会自动创建模式【英文标题】:Schema is not created automatically if not exist Hibernate4 and spring4 for mysql 【发布时间】:2014-11-02 10:13:20 【问题描述】:Schema不存在不自动创建如何解决,如果数据库名存在表示自动创建表但schema不存在表示在运行时没有创建schema怎么办。
休眠属性
hibernate.dialect=org.hibernate.dialect.mysqlDialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=create-update ** i use these keyword seperately also //create or//update**
**xml configuration**
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.testing.domain" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">$hibernate.dialect</prop>
<prop key="hibernate.show_sql">$hibernate.show_sql</prop>
<prop key="hibernate.hbm2ddl.auto">$hibernate.hbm2ddl.auto</prop>
</prop>
</props>
</property>
</bean>
【问题讨论】:
【参考方案1】:在您的代码中使用它,它会删除当前架构并创建一个新架构。
<prop key="hibernate.hbm2ddl.auto">$hibernate.hbm2ddl.auto.create-drop</prop>
【讨论】:
然后使用您可以使用import.sql
。
在资源中添加import.sql
文件如下:
/*create database at first time*/
CREATE SCHEMA your-database-name;
并在hibernate.cfg.xml
中添加一行如下:
<hibernate-configuration>
<session-factory>
...
...
<property name="hbm2ddl.import_files">import.sql</property>
...
...
</session-factory>
</hibernate-configuration>
所以,如果数据库不存在,hibernate 会创建新的数据库。
您的 hibernate.hbm2ddl.auto
设置应定义创建数据库 (options are validate, create, update or create-drop
)
还有“none
”的未记录值可以完全禁用它。
定义如下
<prop key="hibernate.hbm2ddl.auto">create</prop>
create 的值将在 sessionFactory
创建时创建您的表,并保持它们不变。
create-drop 值将创建您的表,然后在您关闭 sessionFactory
时删除它们。
validate:验证架构,不更改数据库。
更新:更新架构。
【讨论】:
创建模式您的数据库名称;我必须在哪里配置 @user3928299 在import.sql
里面,这只是创建schema,如果不存在,hibernate不会创建自己的scheme实例,它只是创建/更新表/列
我找到了解决方案 database.url=jdbc:mysql://localhost:3306/hicasting?createDatabaseIfNotExist=true&characterEncoding=UTF-8;大【参考方案3】:
属性hibernate.hbm2ddl.auto
没有像create-update
这样的值。所有可能的值都是
请阅读documentation。如果不存在,您可以使用create
创建架构
【讨论】:
【参考方案4】:也可以对 hibernate.hbm2ddl.auto 使用选择值而不是创建。我们在我们的应用程序中使用如下,它工作得很好。我认为这是 *** 上关于 hibernate.hbm2ddl.auto 的选择值的第一个信息,因为我在 Google 上搜索过,但没有找到关于“hibernate.hbm2ddl.auto”属性的选择值的任何链接。
<beans:bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<beans:property name="dataSource" ref="databaseDataSource" />
<beans:property name="hibernateProperties">
<beans:props>
<beans:prop key="hibernate.hbm2ddl.auto">select</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
如果有人对选择选项有进一步的输入。请分享。
【讨论】:
看起来 hibernate.hbm2ddl.auto 的选择选项仅用于查询数据库。这意味着应用程序不再更改 DDL。如有错误请指正。 database.url=jdbc:mysql://localhost:3306/hicasting?createDatabaseIfNotExist=true&characterEncoding=UTF-8;以上是关于如果 mysql 不存在 Hibernate 4 和 spring 4,则不会自动创建模式的主要内容,如果未能解决你的问题,请参考以下文章
使用 Hibernate 4、Spring 3、JPA 2 配置 MySQL5 最终有 1 个异常