语法错误,或接近"秩序"表,而这样做简单的选择[重复]

0

的问题

美好的一天,社会!

问题:

我想简单地选择订单从数据库使用和SpringData CrudRepository<Order, Long>但接下来的错误:

2021-11-22 12:34:27.787  WARN 3119 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 42601
2021-11-22 12:34:27.788 ERROR 3119 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: syntax error at or near "order"
  Position: 1136

另一个实体用户、合同或生产者获取正常。 此外,我试图取了不OrderProduct但错误是相同的。

实体:

OrderEntity

@Entity
@Table(name = "order")
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long  id;
    public Long   getId() { return id; }

    @ManyToOne
    @JoinColumn(name = "creator_id")
    private User creator;
    public User  getCreator() { return creator; }
    public void  setCreator(final User creator) { this.creator = creator; }

    @ManyToOne
    @JoinColumn(name = "contract_id")
    private Contract contract;
    public Contract  getContract() { return contract; }
    public void      setContract(final Contract contract) { this.contract = contract; }

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "order")
    private List<OrderProduct> orderProducts;
    public void                setOrderProducts(final List<OrderProduct> orderProducts) { this.orderProducts = orderProducts; }
    public List<OrderProduct>  getOrderProducts() { return orderProducts; }

    private Date arrivingDate;
    public void  setArrivingDate(final Date arrivingDate) { this.arrivingDate = arrivingDate; }
    public Date  getArrivingDate() { return arrivingDate; }

    @Enumerated(EnumType.STRING)

    private Status status;
    public void    setStatus(final Status status) { this.status = status; }
    public Status  getStatus() { return status; }

    private Date creationDate;
    public void  setCreationDate(final Date creationDate) { this.creationDate = creationDate; }
    public Date  getCreationDate() { return creationDate; }

    private String document;
    public void    setDocument(final String document) { this.document = document; }
    public String  getDocument() { return document; }


    protected Order() {}
    public Order(User creator, Contract contract, List<OrderProduct> orderProducts, Date arrivingDate, String document, Status status, Date creationDate) {
        this.creator       = creator;
        this.contract      = contract;
        this.arrivingDate  = arrivingDate;
        this.status        = status;
        this.creationDate  = creationDate;
        this.document      = document;
        this.orderProducts = orderProducts;
    }
}

OrderProductEntity

@Entity
@Table(name = "order_product")
public class OrderProduct {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long  id;
    public Long   getId() { return id; }

    @ManyToOne
    @JoinColumn(name = "product_id")
    private Product product;
    public Product  getProduct() { return product; }
    public void     setProduct(final Product product) { this.product = product; }

    @ManyToOne
    @JoinColumn(name = "order_id")
    private Order order;
    public Order  getOrder() { return order; }
    public void   setOrder(final Order order) { this.order = order; }

    private Integer quantity;
    public void setQuantity(final Integer quantity) { this.quantity = quantity; }
    public Integer getQuantity() { return quantity; }


    protected OrderProduct() {}
    public OrderProduct(final Product product, final Order order, final Integer quantity) {
        this.product  = product;
        this.order    = order;
        this.quantity = quantity;
    }
}

取代码

@Override
public Order findById(final Long id) throws Exception {
    return orderRepository.findById(id)
        .orElseThrow(() -> new Exception("There is no order by id:" + id));
}

休眠的原因debug:

select
        order0_.id as id1_2_0_,
        order0_.arriving_date as arriving2_2_0_,
        order0_.contract_id as contract6_2_0_,
        order0_.creation_date as creation3_2_0_,
        order0_.creator_id as creator_7_2_0_,
        order0_.document as document4_2_0_,
        order0_.status as status5_2_0_,
        contract1_.id as id1_1_1_,
        contract1_.creator_id as creator_4_1_1_,
        contract1_.end_date as end_date2_1_1_,
        contract1_.producer_id as producer5_1_1_,
        contract1_.start_date as start_da3_1_1_,
        user2_.id as id1_0_2_,
        user2_.email as email2_0_2_,
        user2_.name as name3_0_2_,
        user2_.password as password4_0_2_,
        user2_.phone as phone5_0_2_,
        user2_.position as position6_0_2_,
        user2_.surname as surname7_0_2_,
        producer3_.id as id1_4_3_,
        producer3_.city as city2_4_3_,
        producer3_.contact_email as contact_3_4_3_,
        producer3_.contact_name as contact_4_4_3_,
        producer3_.contact_phone as contact_5_4_3_,
        producer3_.country as country6_4_3_,
        producer3_.street as street7_4_3_,
        user4_.id as id1_0_4_,
        user4_.email as email2_0_4_,
        user4_.name as name3_0_4_,
        user4_.password as password4_0_4_,
        user4_.phone as phone5_0_4_,
        user4_.position as position6_0_4_,
        user4_.surname as surname7_0_4_
    from

    order order0_ left outer join
        contract contract1_
            on order0_.contract_id=contract1_.id
    left outer join
        client user2_
            on contract1_.creator_id=user2_.id
    left outer join
        producer producer3_
            on contract1_.producer_id=producer3_.id
    left outer join
        client user4_
            on order0_.creator_id=user4_.id
    where
        order0_.id=?

DB图:

感谢您的时间和注意力!

hibernate java postgresql spring
2021-11-22 11:23:30
1

最好的答案

-2

由于订单是一个词保留在SQL,你必须表明,它的名称表通过增加反引号如`. 而不是添加实体这样的:

@Table(name = "order") 

添加:

@Table(name = "`order`")

在这里,这个词 order 封闭在反引号。

2021-11-22 11:31:34

反引号? 双引号,"你的意思。 甚至MySQL支持双引号。
Frank Heikens

这是反引号,我也有一个表叫了这就是它是如何访问mySQL.
njari

不,不,给它尝试在的任何数据库,并且,只能在MySQL. PostgreSQL SQL Server,Oracle,他们不接受反引号。
Frank Heikens

试着双引号,是不是为我工作。 我在写.
njari

反引号引用的关键词是无效的,在Postgres和标准SQL。
a_horse_with_no_name

检查ANSI_QUOTES mariadb.com/kb/en/sql-mode/#ansi_quotes 迫MySQL/只使用标准SQL的功能。
Frank Heikens

谢谢你,不知道这不是标准SQL! 一些新的东西。
njari

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................