在创建表时,Spring Boot出现“oracle.jdbc.OracleDatabaseException:ORA-00904:Inc.IDENTIFIER”错误

vawmfj5a  于 2022-10-23  发布在  Spring
关注(0)|答案(2)|浏览(248)

在Spring Boot中,我使用代码优先方法创建数据库表。然后,在运行应用程序时,其中一个表的结果显示以下错误:

WARN  o.h.t.s.i.ExceptionHandlerLoggedImpl.handleException - GenerationTarget encountered exception accepting command : Error executing DDL "alter table statistic add date timestamp" via JDBC Statement
org.hibernate.tool.schema.spi.CommandAcceptanceExcepti
on: Error executing DDL "alter table statistic add date timestamp" via JDBC Statement]

oracle.jdbc.OracleDatabaseException: ORA-00904: : invalid identifier

类实体如下:

@Entity
@Table(name = "statistic")
public class Statistic {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String title;
    private Long value;
    private Date date;
    private String unit;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Long getValue() {
        return value;
    }

    public void setValue(Long value) {
        this.value = value;
    }

    public Date getDate() {
        return date;
    }

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

    public String getUnit() {
        return unit;
    }

    public void setUnit(String unit) {
        this.unit = unit;
    }
}

有人知道问题出在哪里吗?

o7jaxewo

o7jaxewo1#

这是错误的:

alter table statistic add date timestamp
                          ----
                          this

date是Oracle数据类型的“保留字”。将列名更改为其他名称,例如datumc_datestatistic_date、...然后跑

alter table statistic add datum timestamp
dffbzjpn

dffbzjpn2#

如果您有此问题,且解决方案对您(像我一样)不起作用,请尝试在物业中进行设置:

spring.jpa.hibernate.naming.physical-strategy=com.proto.CustomPhysicalNamingStrategy

我会试着给你一个大局。Oracle中的表确实有一个列,其中使用了关键字,其名称为DATE。我已经找到了三种方法来解决它,但没有一种方法对我不起作用。这些方法包括:
1.使用双引号进行手动转义,如“”Date“”
1.使用特定于休眠的反勾号字符(如“‘Date’”)进行手动转义
1.spring.jpa.properties.hibernate.globally_quoted_identifiers=true此设置会在其他表中导致问题,因此不适用于我。也许有一个特定的案例。
问题出在小写的柱的建筑名称上。Hibernate使用类似<ALIAS_TABLE>_.“date”的模式构建查询--在我的例子中--但Oracle返回了一个错误。当我将“Date”更改为“Date”时,在SQLDeveloper上成功执行了查询。因此,问题是Hibernate不区分大小写,但对Oracle来说确实很重要。物理策略的属性允许Hibernate使用与注解相同的列名构建查询--它是有效的。我不知道这种情况可能会发生在Oracle 12以外的其他数据库中,但Oracle确实有。

相关问题