org.hibernate.tool.schema.spi.CommandAcceptanceException Error executing DDL create table role

在尝试创建数据库表时遇到了一个错误:`org.hibernate.tool.schema.spi.CommandAcceptanceException`,该错误表明实体类中的字段名与已有数据库字段冲突。只需修改实体类的字段命名即可避免此问题。确保字段名在数据库中是唯一的,以保证数据表正确创建。
org.hibernate.tool.schema.spi.CommandAcceptanceException Error executing DDL create table role (id bigint not null auto_increment, describe varchar(255), rolename varchar(255), primary key (id)) engine=InnoDB via JDBC Statement
  • 遇到这个问题,只需要修改一下实体类中的字段名就可以了,原因是实体类中的字段名起了冲突
package com.dahsing.model; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import lombok.Data; import java.util.Date; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @Entity @Data @Table(name = "MSN_NOA_DATA", schema = "BOSS") public class NOAObject { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "template_provide_date", nullable = false) private Date templateProvideDate; @Column(name = "target_production_deployment_date", nullable = false) private Date targetProductionDeploymentDate; @Column(name = "target_uat_ready_date", nullable = false) private Date targetUATReadyDate; @Column(name = "target_uat_sign_off_date", nullable = false) private Date targetUATSignOffDate; @Column(name = "production_change_submit_time", nullable = false) private Date productionChangeSubmitTime; @OneToMany(mappedBy = "noaObject", orphanRemoval = true) private Set<StatusMapping> statusMappings = new LinkedHashSet<>(); @Column(name = "number_of_response") private int numberOfRespond; // NOA schedule title @Column(name = "scr", nullable = false) private String scr; @Column(name = "desc", nullable = false) private String desc; @Column(name = "template_type") private String templateType; @Column(name = "templateId") private String templateId; @Column(name = "requester", nullable = false) private String requester; @Column(name = "requester_email") private String requesterEmail; @OneToMany(mappedBy = "noaObject", orphanRemoval = true) private List<Task> task; @Column(name = "comment") private String comment; } 2025-07-18T10:18:42.584+08:00 WARN 12568 --- [ restartedMain] o.h.t.s.i.ExceptionHandlerLoggedImpl : GenerationTarget encountered exception accepting comma nd : Error executing DDL "create table boss.msn_noa (id number(19,0) generated as identity, comment varchar2(255 char), desc varchar2(255 char) not null, number_ of_response number(10,0), production_change_submit_time timestamp(6) not null, requester varchar2(255 char) not null, requester_email varchar2(255 char), scr var char2(255 char) not null, target_production_deployment_date timestamp(6) not null, target_uat_ready_date timestamp(6) not null, target_uat_sign_off_date timestam p(6) not null, template_id varchar2(255 char), template_provide_date timestamp(6) not null, template_type varchar2(255 char), primary key (id))" via JDBC [ORA-00904: : invalid identifier ] org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table boss.msn_noa (id number(19,0) generated as identity, comment varchar2 (255 char), desc varchar2(255 char) not null, number_of_response number(10,0), production_change_submit_time timestamp(6) not null, requester varchar2(255 char) not null, requester_email varchar2(255 char), scr varchar2(255 char) not null, target_production_deployment_date timestamp(6) not null, target_uat_ready_date tim estamp(6) not null, target_uat_sign_off_date timestamp(6) not null, template_id varchar2(255 char), template_provide_date timestamp(6) not null, template_type varchar2(255 char), primary key (id))" via JDBC [ORA-00904: : invalid identifier
最新发布
07-19
在使用 Hibernate 通过 JDBC 执行 DDL(数据定义语言)语句时,出现 `CommandAcceptanceException` 异常通常表示 Hibernate 在尝试创建或修改数据库结构时遇到了问题。这类错误常见于方言(Dialect)配置不当、数据库权限不足、或者数据库引擎不支持某些特性。 ### 常见原因与解决方案 #### 方言配置不正确 Hibernate 使用方言来适配不同数据库的行为。如果使用的方言与目标数据库版本不匹配,可能导致生成的 SQL 语句不符合当前数据库的要求。例如,在使用 MySQL 5.7 时,若配置了 `MySQL5Dialect` 而非 `MySQL57Dialect`,可能无法正确识别某些 InnoDB 特性或语法[^4]。 建议根据实际数据库版本选择合适的方言: - MySQL 5.x:`org.hibernate.dialect.MySQL5Dialect` - MySQL 5.5:`org.hibernate.dialect.MySQL55Dialect` - MySQL 5.7:`org.hibernate.dialect.MySQL57Dialect` 在 Spring Boot 的 `application.properties` 或 `persistence.xml` 中配置如下: ```properties spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect ``` #### 数据库引擎不兼容 Hibernate 默认使用 InnoDB 存储引擎。如果数据库默认引擎为 MyISAM,而 DDL 中指定了 `engine=InnoDB`,但目标数据库不支持 InnoDB,则会抛出异常。可以尝试更改表定义中的存储引擎,或确保数据库支持 InnoDB[^2]。 修改方式如下: ```sql create table hibernate_sequence (next_val bigint) engine=MyISAM; ``` 或在 Hibernate 配置中禁用显式指定引擎: ```properties hibernate.hbm2ddl.use-incremental-schema-validation=false ``` #### 权限问题 DDL 操作需要数据库用户拥有相应的权限。例如,`CREATE TABLE`、`ALTER TABLE` 等操作需要用户具有足够的权限。请检查连接数据库的用户是否具备这些权限,并在必要时授予相应权限: ```sql GRANT CREATE, ALTER ON your_database.* TO 'your_user'@'localhost'; FLUSH PRIVILEGES; ``` #### 自动建表策略配置不当 Spring Data JPA 提供了多种 `hibernate.hbm2ddl.auto` 配置选项,如 `create`, `update`, `validate`, `none`。若设置为 `create`,Hibernate 将在启动时删除并重新创建表结构。如果数据库中已有相同名称的表且无权删除,也会导致异常。 推荐生产环境中使用 `validate`,仅验证映射是否与数据库结构一致,而不执行任何 DDL 操作: ```properties spring.jpa.hibernate.ddl-auto=validate ``` #### 示例配置文件片段 以下是一个典型的 Spring Boot + JPA 配置示例: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=UTC username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: use-new-id-generator-mappings: false ddl-auto: validate properties: hibernate: dialect: org.hibernate.dialect.MySQL57Dialect ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小狐狸崽子OvO

你的鼓励将是我创造最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值