摘要:實體關系映射建了四個實體,啟動程序。打開數據庫,發現只生成了三張表。與都創建成功,只有表創建失敗。同時,控制臺也報出了如下錯誤大致意思就是你的表中有一個語法錯誤,導致了創建表失敗。原因猜測應該是屬于中的關鍵字,所以會報語法錯誤。
實體關系映射
建了四個實體,啟動程序。
打開數據庫,發現只生成了三張表。
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表的時候異常就發生了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69621.html
摘要:什么是作為的子項目,是一款基于的企業批處理框架。首先,運行的基本單位是一個,一個就做一件批處理的事情。總結為我們提供了非常實用的功能,對批處理場景進行了完善的抽象,它不僅能實現小數據的遷移,也能應對大企業的大數據實踐應用。 前言 本文將從0到1講解一個Spring Batch是如何搭建并運行起來的。本教程將講解從一個文本文件讀取數據,然后寫入MySQL。 什么是 Spring Batc...
摘要:當我們的需求出現變動時,工廠模式會需要進行相應的變化。總結來說,要想成功進行一次阿里巴巴的面試,你需要了解甚至掌握以下內容語言,尤其是線程原理數據庫事務,加鎖,重點分布式設計模式可以說是涉及范圍非常廣了。 showImg(https://segmentfault.com/img/bV8cSY?w=576&h=432); 前言 今天本是一個陽光明媚,鳥語花香的日子。于是我決定在逛街中感受...
摘要:最近開發中遇到的一個主從延遲的坑,記錄并總結,避免再次犯同樣的錯誤。運行時查詢為空,執行完畢后查詢時內容存在,初步懷疑是主從延遲問題。報錯只是部分失敗,確定是主從延遲的問題。接下來,會去學習主從復制的原理,敬請期待。 最近開發中遇到的一個MySQL主從延遲的坑,記錄并總結,避免再次犯同樣的錯誤。 情景 一個活動信息需要審批,審批之后才能生效。因為之后活動要編輯,編輯后也可能觸發審批,審...
閱讀 1240·2021-11-22 13:54
閱讀 1425·2021-11-22 09:34
閱讀 2698·2021-11-22 09:34
閱讀 4009·2021-10-13 09:39
閱讀 3342·2019-08-26 11:52
閱讀 3361·2019-08-26 11:50
閱讀 1529·2019-08-26 10:56
閱讀 1913·2019-08-26 10:44