登录
首页 >  数据库 >  MySQL

记一次 Hibernate 数据表创建失败

来源:SegmentFault

时间:2023-02-24 19:56:46 316浏览 收藏

小伙伴们对数据库编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《记一次 Hibernate 数据表创建失败》,就很适合你,本篇文章讲解的知识点主要包括MySQL、Java、hibernate。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

实体关系映射

建了四个实体,启动程序。

clipboard.png

打开数据库,发现只生成了三张表。

clipboard.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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;
    }
}

解决方案

看看这个实体,并没有找到有什么错误。

然后就去对比慕课网的代码,发现讲师建的订单实体名为

1
OrderMaster
,我这里的代码与讲师的代码除了实体名不同其他完全一样。

试着将实体名从

1
Order
修改为
1
OrderMaster

clipboard.png

改完名,妥妥地成功。

原因

猜测应该是

1
Order
属于
1
SQL
中的关键字,所以会报语法错误。

把语法错误的报错信息加上

1
order
1
Google
一下。

1
Unsuccessful: create table order You have an error in your SQL syntax; order

clipboard.png

果然,

1
StackOverflow
给出了一个非常完美的解释。

1
Order
实体会默认映射到
1
order
表,但是
1
order
1
sql
中的一个服务关键字。所以生成
1
order
表的时候异常就发生了。

文中关于mysql的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《记一次 Hibernate 数据表创建失败》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表