摘要:实体关系映射建了四个实体,启动程序。打开数据库,发现只生成了三张表。与都创建成功,只有表创建失败。同时,控制台也报出了如下错误大致意思就是你的表中有一个语法错误,导致了创建表失败。原因猜测应该是属于中的关键字,所以会报语法错误。
实体关系映射
建了四个实体,启动程序。
打开数据库,发现只生成了三张表。
OrderDetail、ProductCategory与ProductInfo都创建成功,只有Order表创建失败。
同时,控制台也报出了如下错误:
org.hibernate.tool.hbm2ddl.SchemaExport : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near "order" at line 1 org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: create table order (id varchar(255) not null, amount decimal(19,2), buyer_address varchar(255), buyer_name varchar(255), buyer_openid varchar(255), buyer_phone varchar(255), create_time datetime, pay_status integer, status integer, update_time datetime, primary key (id)) org.hibernate.tool.hbm2ddl.SchemaExport : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near "order (id varchar(255) not null, amount decimal(19,2), buyer_address varchar(255" at line 1 org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: alter table order_detail add constraint FKplam7wxc4tjbgex0xyk8f0qxo foreign key (order_id) references order (id) org.hibernate.tool.hbm2ddl.SchemaExport : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near "order (id)" at line 1
大致意思就是你的Order表中有一个SQL语法错误,导致了创建order表失败。
Order实体语法错误,第一反应就是去看看Order实体,应该是哪里写错了。
package com.imooc.spring.entity; import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.UpdateTimestamp; import javax.persistence.Entity; import javax.persistence.Id; import java.math.BigDecimal; import java.util.Calendar; /** * @author zhangxishuo on 2018/4/25 * 订单主表 */ @Entity public class Order { public static final Integer NEW = 0; // 新下单 public static final Integer FINISH = 1; // 已完结 public static final Integer CANCEL = 2; // 已取消 public static final Integer WAIT = 0; // 未支付 public static final Integer SUCCESS = 1; // 支付成功 @Id private String id; // 订单id private String buyerName; // 买家姓名 private String buyerPhone; // 买家电话 private String buyerAddress; // 买家地址 private String buyerOpenid; // 买家Openid private BigDecimal amount; // 总金额 private Integer status = NEW; // 订单状态 private Integer payStatus = WAIT; // 支付状态 @CreationTimestamp private Calendar createTime; // 创建时间 @UpdateTimestamp private Calendar updateTime; // 更新时间 public Order() { } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getBuyerName() { return buyerName; } public void setBuyerName(String buyerName) { this.buyerName = buyerName; } public String getBuyerPhone() { return buyerPhone; } public void setBuyerPhone(String buyerPhone) { this.buyerPhone = buyerPhone; } public String getBuyerAddress() { return buyerAddress; } public void setBuyerAddress(String buyerAddress) { this.buyerAddress = buyerAddress; } public String getBuyerOpenid() { return buyerOpenid; } public void setBuyerOpenid(String buyerOpenid) { this.buyerOpenid = buyerOpenid; } public BigDecimal getAmount() { return amount; } public void setAmount(BigDecimal amount) { this.amount = amount; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public Integer getPayStatus() { return payStatus; } public void setPayStatus(Integer payStatus) { this.payStatus = payStatus; } public Calendar getCreateTime() { return createTime; } public void setCreateTime(Calendar createTime) { this.createTime = createTime; } public Calendar getUpdateTime() { return updateTime; } public void setUpdateTime(Calendar updateTime) { this.updateTime = updateTime; } }解决方案
看看这个实体,并没有找到有什么错误。
然后就去对比慕课网的代码,发现讲师建的订单实体名为OrderMaster,我这里的代码与讲师的代码除了实体名不同其他完全一样。
试着将实体名从Order修改为OrderMaster。
改完名,妥妥地成功。
原因猜测应该是Order属于SQL中的关键字,所以会报语法错误。
把语法错误的报错信息加上order去Google一下。
Unsuccessful: create table order You have an error in your SQL syntax; order
果然,StackOverflow给出了一个非常完美的解释。
Order实体会默认映射到order表,但是order是sql中的一个服务关键字。所以生成order表的时候异常就发生了。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/69621.html
摘要:什么是作为的子项目,是一款基于的企业批处理框架。首先,运行的基本单位是一个,一个就做一件批处理的事情。总结为我们提供了非常实用的功能,对批处理场景进行了完善的抽象,它不仅能实现小数据的迁移,也能应对大企业的大数据实践应用。 前言 本文将从0到1讲解一个Spring Batch是如何搭建并运行起来的。本教程将讲解从一个文本文件读取数据,然后写入MySQL。 什么是 Spring Batc...
摘要:当我们的需求出现变动时,工厂模式会需要进行相应的变化。总结来说,要想成功进行一次阿里巴巴的面试,你需要了解甚至掌握以下内容语言,尤其是线程原理数据库事务,加锁,重点分布式设计模式可以说是涉及范围非常广了。 showImg(https://segmentfault.com/img/bV8cSY?w=576&h=432); 前言 今天本是一个阳光明媚,鸟语花香的日子。于是我决定在逛街中感受...
摘要:最近开发中遇到的一个主从延迟的坑,记录并总结,避免再次犯同样的错误。运行时查询为空,执行完毕后查询时内容存在,初步怀疑是主从延迟问题。报错只是部分失败,确定是主从延迟的问题。接下来,会去学习主从复制的原理,敬请期待。 最近开发中遇到的一个MySQL主从延迟的坑,记录并总结,避免再次犯同样的错误。 情景 一个活动信息需要审批,审批之后才能生效。因为之后活动要编辑,编辑后也可能触发审批,审...
阅读 1242·2021-11-22 13:54
阅读 1426·2021-11-22 09:34
阅读 2699·2021-11-22 09:34
阅读 4010·2021-10-13 09:39
阅读 3343·2019-08-26 11:52
阅读 3363·2019-08-26 11:50
阅读 1531·2019-08-26 10:56
阅读 1913·2019-08-26 10:44