使用Vaadin创建H2数据库Upload表时执行DDL报错
解决Vaadin+H2创建Upload表失败的问题
问题根源
报错核心原因是UPLOAD是H2数据库的保留关键字,直接用它作为表名会触发SQL语法冲突,导致Hibernate执行DDL语句失败。
解决方案
1. 修改实体类表名映射
在Upload实体类上通过@Table注解指定非保留字表名,比如file_upload:
@Entity @Table(name = "file_upload") public class Upload { // 你的实体字段、主键等配置 }
2. 可选:用反引号包裹保留字表名
如果坚持使用upload作为表名,可在注解中用反引号包裹(H2支持该语法):
@Entity @Table(name = "`upload`") public class Upload { // ... }
3. 清理残留并重启
- 删除H2数据库的本地文件(若使用文件存储模式),避免旧表结构干扰
- 重启应用,让Hibernate重新生成正确的表结构
4. 优化字段类型(可选)
注意到import_date被映射为bigint,如果实体类中是日期类型(如LocalDateTime),建议调整为H2的TIMESTAMP类型,避免后续数据操作异常:
@Column(name = "import_date", columnDefinition = "TIMESTAMP") private LocalDateTime importDate;
内容的提问来源于stack exchange,提问作者louis
相关产品推荐
相关产品推荐

