【问题标题】:MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntaxMySQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法
【发布时间】:2019-03-25 00:27:56
【问题描述】:

我收到一个错误。 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“订单(id)”附近使用正确的语法 不知道为什么。任何人都可以帮忙吗? 下面是实体。订单可以有很多产品。产品可以与许多订单相关联,并且餐厅与产品具有一对一的关系

    @Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @ManyToMany
    @JoinTable(name = "order_product", joinColumns = @JoinColumn(name = "order_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "product_id", referencedColumnName = "id"))
    private Set<Product> products = new HashSet<>();

    }


    @Entity
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @ManyToOne
    @JoinColumn(name = "restaurant_id", referencedColumnName = "id",  insertable=false, updatable=false)
    @JsonBackReference
    private Restaurant restaurant;
    private int restaurant_id;
    private String name;
    private String description;
    private float price;
    private float discount;

    @ManyToMany(fetch = FetchType.EAGER)
    @JsonIgnore
    private Set<Order> orders = new HashSet<>();
    }



 @Entity
public class Restaurant {
    @Id
    @GeneratedValue
    private int id;
    @NotNull
    private String name;
    private String city;
    private String address;
    private String email;
    private String phone;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "restaurant", cascade = CascadeType.ALL)
    @JsonManagedReference
    private List<Product> menu;
}

【问题讨论】:

    标签: mysql spring spring-data-jpa hibernate-mapping


    【解决方案1】:

    订单有多种产品也可以且正确。但从逻辑上讲,将订单与产品联系起来是不对的。所以我认为如果只是从 Product 实体中删除以下行,它将解决您的问题。

    @ManyToMany
    @JoinTable(name = "order_product", joinColumns = @JoinColumn(name = "product_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name ="order_id", referencedColumnName = "order_id"))
    private Set<Order> order;
    

    【讨论】:

    • 感谢您的回答。我仍然收到错误消息。我在我的问题中添加了完整的错误,可能可以帮助您更好地识别问题
    • 另外,当我从产品中删除订单集时,我收到错误“无法执行语句;SQL [n/a];嵌套异常是 org.hibernate.exception.SQLGrammarException:无法执行语句” ,' 在使用 body 发出订单后调用时,{ "product":[{ "name":"test", "restaurant_id" : "1", "description":"test" }] }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2017-06-01
    • 2020-02-22
    • 2021-05-12
    • 2018-11-27
    相关资源
    最近更新 更多