Chyba syntaxe alebo v jeho blízkosti "objednávka" tabuľka pritom jednoduché VYBERTE položku [duplicitné]

0

Otázka

Dobrý deň, komunity!

Problém:

Snažím sa jednoducho VYBERTE objednávky z DB pomocou SpringData a CrudRepository<Order, Long>,, ale dostávajú ďalšie chyby:

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

Iným subjektom, ako Užívateľ, Zmluvy alebo Výrobcov sú prijem normálne. Tiež som sa snažil fetch Objednávku bez OrderProduct ale chyba bola rovnaká.

Subjekty:

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;
    }
}

Prijem kód

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

Režim dlhodobého spánku PSQL ladenia:

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 diagram:

diagram

Vďačný za váš čas a pozornosť!

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

Najlepšiu odpoveď

-2

Od objednávky je vyhradené slovo v SQL, je potrebné uviesť, že to je názov tabuľky pridaním backticks páči sa mi to". Namiesto pridania vaše subjektu ako je tento :

@Table(name = "order") 

Pridať tento :

@Table(name = "`order`")

Tu sa slovo order je uzavretá v backticks.

2021-11-22 11:31:34

Backticks? Dvojité úvodzovky " máte na mysli. Aj MySQL podporuje úvodzoviek.
Frank Heikens

Je to backticks, tiež mám tabuľku s názvom objednávky a to, ako je prístup na mySQL.
njari

Nie, to nie, dať to skúsiť v akejkoľvek databázy, a že funguje len v MySQL. PostgreSQL, SQL Server, Oracle, oni neakceptujú backticks.
Frank Heikens

Snažil úvodzoviek, nefunguje pre mňa. Som na MariaDB.
njari

Backticks citovať slová sú neplatné v Postgres a štandardu SQL.
a_horse_with_no_name

Skontrolujte ANSI_QUOTES mariadb.com/kb/en/sql-mode/#ansi_quotes do platnosti MySQL/MariaDB používať štandardné SQL funkcií.
Frank Heikens

Vďaka, nevedel, že to nie je štandardný SQL! Niečo nové každý deň.
njari

V iných jazykoch

Táto stránka je v iných jazykoch

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