首页 > 解决方案 > Java-Oracle - 无法创建特定表

问题描述

我总是得到错误 java.sql.SQLSyntaxErrorException: ORA-00904: : invalid identifier 和 java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist when created table。这是我的一些桌子

package com.domibowo.salestracking.models;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.util.List;

@Entity
@Table(schema = "SALES_TRACKING", name="CUSTOMER")
public class Customer {

    @Id
    @GeneratedValue(generator = "seq", strategy= GenerationType.SEQUENCE)
    @SequenceGenerator(name="seq", sequenceName = "SEQ1")
    private Long id;
    @Column(name="citizen_id")
    private Long citizenId;
    @Column(name = "full_name")
    private String fullName;
    @Column(name = "address")
    private String address;
    @Column(name="city")
    private String city;

    @ManyToOne
    @JoinColumn(name="region_id")
    @JsonIgnoreProperties(value = {"salesList","customerList"})
    private Region region;

    @Transient
    private Long regionId;

    @OneToMany(mappedBy = "customer")
    private List<Details> details;

    public Customer() {
    }

    public Customer(Long id, Long citizenId, String fullName, String address, String city, Region region, Long regionId, List<Details> details) {
        this.id = id;
        this.citizenId = citizenId;
        this.fullName = fullName;
        this.address = address;
        this.city = city;
        this.region = region;
        this.regionId = regionId;
        this.details = details;
    }

    public Long getId() {
        return id;
    }

    public Long getCitizenId() {
        return citizenId;
    }

    public void setCitizenId(Long citizen_id) {
        this.citizenId = citizen_id;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String full_name) {
        this.fullName = full_name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public Region getRegion() {
        return region;
    }

    public void setRegion(Region region) {
        this.region = region;
    }

    public List<Details> getDetails() {
        return details;
    }

    public void setDetails(List<Details> details) {
        this.details = details;
    }

    public Long getRegionId() {
        return regionId;
    }

    public void setRegionId(Long regionId) {
        this.regionId = regionId;
    }
}

产品表和其余部分能够毫无问题地创建。

但是这个,

package com.domibowo.salestracking.models;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.time.LocalDate;

@Entity
@Table(schema = "SALES_TRACKING",name="HISTORY")
public class History {

    @Id
    @GeneratedValue(generator = "seq", strategy= GenerationType.SEQUENCE)
    @SequenceGenerator(name="seq", sequenceName = "SEQ1")
    private Long id;

    @ManyToOne
    @JoinColumn(name = "sales_id")
    @JsonIgnoreProperties(value = {"region"})
    private Sales sales;

    @OneToOne
    @JoinColumn(name = "details_id")
    @JsonIgnoreProperties(value = {"history"})
    private Details details;

    @Column(name = "date")
    @JsonFormat(pattern = "dd/MM/yyyy")
    private LocalDate date;

    @Column(name = "total")
    private Double total;

    @Transient
    private Long detailsId;

    @Transient
    private Long salesId;

    public History() {
    }

    public History(Long id, Sales sales, Long salesId, Details details, LocalDate date, Double total, Long detailsId) {
        this.id = id;
        this.sales = sales;
        this.details = details;
        this.date = date;
        this.total = total;
        this.detailsId = detailsId;
        this.salesId = salesId;
    }

    public Long getDetailsId() {
        return detailsId;
    }

    public void setDetailsId(Long detailsId) {
        this.detailsId = detailsId;
    }

    public Long getId() {
        return id;
    }

    public Sales getSales() {
        return sales;
    }

    public void setSales(Sales sales) {
        this.sales = sales;
    }

    public Details getDetails() {
        return details;
    }

    public void setDetails(Details details) {
        this.details = details;
    }

    public Double getTotal() {
        return total;
    }

    public void setTotal(Double total) {
        this.total = total;
    }

    public LocalDate getDate() {
        return date;
    }

    public void setDate(LocalDate date) {
        this.date = date;
    }

    public Long getSalesId() {
        return salesId;
    }

    public void setSalesId(Long salesId) {
        this.salesId = salesId;
    }
}

即使使用的生成器 ID 与其他生成器 ID 相同,在创建历史记录表时我总是会收到 ORA-00904 和 ORA-00942 错误。非常感谢任何帮助!

标签: javaoraclespring-boot

解决方案


即使在使用 Hibernate JPA 时,也不能忘记使用 Oracle 数据库,并且必须避免使用保留字作为列名。

因此,请查看所有列名,尤其是这一列

 @Column(name = "date")

错误 ORA-00904invalid identifier指向此方向。DATE保留字,不能用作列名。

第二个(ORA-00942 table or view does not exist)是由于无法创建表而导致的后续消息。


推荐阅读