登录
首页 >  数据库 >  MySQL

记一次 Hibernate 数据表创建失败

来源:SegmentFault

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

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

实体关系映射

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

clipboard.png

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

clipboard.png

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

clipboard.png

改完名,妥妥地成功。

原因

猜测应该是

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

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

order
Google
一下。

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

clipboard.png

果然,

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

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

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

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