Hibernate自动创建表hibernate.hbm2ddl.auto 异常

在使用Hibernate5.2.10时,配置hibernate.hbm2ddl.auto = update时,启动服务会因表已存在导致异常。错误源于Hibernate尝试重复创建已有表。将配置改为create可正常运行,但会导致每次启动删除表。解决方案是添加hibernate.default_schema配置,指定数据库schema,避免冲突。这样,hibernate在更新时将正确执行DDL,且不会重复创建表。
摘要由CSDN通过智能技术生成

       最近在更新使用 hibernate5.2.10 时发现,配置 hibernate.hbm2ddl.auto = update 时会存在问题,首次启动可以正常的自动生成DDL去创建表,但当服务停止后再次启动时会报错,如下:

2017-05-23 16:25:46,894 [localhost-startStop-1] WARN  [org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl] - GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:525) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:470) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:273)
………………
Caused by: java.sql.SQLException: ORA-00955: 名称已由现有对象使用
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
………………

其次,hibernate.hbm2ddl.auto = update实体变更时没有自动更新数据库;
当我Entity java实体有增加字段时,重启服务还是包如上错误,根本不给我执行修改表结构的语句,我在使用Hibernate3的时候没有这样的情况;这里发现使用 update Hibernate 总是会重复去生成DDL并进行创建表,当然表本身已经存在了,所以一定会报错;

难道是这个版本Hibernate有毛病(开启了推卸责任的态度去思考问题),又将配置修改为hibernate.hbm2ddl.auto = create 时,没毛病,可以正常执行,但每次删表我肯定受不了;后台打印日志如下:
Hibernate: drop table A_TEST_COMPANY cascade constraints
Hibernate: drop sequence hibernate_sequence
Hibernate: create sequence hibernate_sequence start with 1 increment by 1
Hibernate: create table A_TEST_COMPANY (ID number(19,0) not null, COMPANY_ADDR varchar2(100 char), COMPANY_DESC varchar2(100 char), COMPANY_NAME varchar2(100 char), COMPANY_NAME_CN varchar2(100 char), COMPANY_PHONE varchar2(15 char), primary key (ID))

经过多方查证,发现有hibernate.default_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值