Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate和Spring DataJPA无法处理具有特殊字符的Oracle表名?_Spring_Oracle_Hibernate_Spring Boot_Spring Data Jpa - Fatal编程技术网

Hibernate和Spring DataJPA无法处理具有特殊字符的Oracle表名?

Hibernate和Spring DataJPA无法处理具有特殊字符的Oracle表名?,spring,oracle,hibernate,spring-boot,spring-data-jpa,Spring,Oracle,Hibernate,Spring Boot,Spring Data Jpa,当我使用Spring datajpa和Hibenate读取Oracle时,我遇到了一个错误,我将描述以下内容: Oracle表名包含特殊字符(双引号),因此,我必须使用SELECT*FROM“Graph”,其中“ID”=1 因此,当我使用hibernate编写实体类时,我必须指出它的特殊名称 以下是用于创建“图形”表的ddl: CREATE TABLE "ATLASCOPCO_TOOLSNET"."Graph" ( "ID" NUMBER(19) NOT NULL , "ResultID" NU

当我使用Spring datajpa和Hibenate读取Oracle时,我遇到了一个错误,我将描述以下内容:

  • Oracle表名包含特殊字符(双引号),因此,我必须使用
    SELECT*FROM“Graph”,其中“ID”=1

  • 因此,当我使用hibernate编写实体类时,我必须指出它的特殊名称

  • 以下是用于创建
    “图形”
    表的ddl:

    CREATE TABLE "ATLASCOPCO_TOOLSNET"."Graph" (
    "ID" NUMBER(19) NOT NULL ,
    "ResultID" NUMBER(19) NOT NULL ,
    "GraphTypeID" NUMBER(19) NOT NULL ,
    "SampleTime" BINARY_FLOAT NOT NULL ,
    "AngleOffset" BINARY_FLOAT NOT NULL ,
    "GraphValues" BLOB NOT NULL ,
    "AngleFactor" BINARY_DOUBLE NULL ,
    "TorqueFactor" BINARY_DOUBLE NULL ,
    "StartTime" BINARY_FLOAT NULL ,
    "EndTime" BINARY_FLOAT NULL 
    )
    LOGGING
    NOCOMPRESS
    NOCACHE
    
    当我使用以下常规表名时:

    @Entity
    @Table(name = "Graph")
    @Getter
    @Setter
    public class Graph {
        @Id
        @Column(name = "ID\"")
        private Long id;
    
        @Column(name = "ResultID")
        private Long resultId;
    
        @Column(name = "GraphTypeID")
        private Long graphTypeID;
    
        @Column(name = "SampleTime")
        private BINARY_FLOAT sampleTime;
    
        @Column(name = "AngleOffset")
        private BINARY_FLOAT angleOffset;
    
        @Column(name = "GraphValue")
        private byte[] graphValue;
    
        @Column(name = "AngleFactor")
        private BINARY_DOUBLE angleFactor;
    
        @Column(name = "TorqueFactor")
        private BINARY_DOUBLE torqueFactor;
    
        @Column(name = "StartTime")
        private BINARY_FLOAT startTime;
    
        @Column(name = "EndTime")
        private BINARY_FLOAT endTime;
    }
    
    我收到错误:
    原因:java.sql.SQLSyntaxErrorException:ORA-00972:标识符太长

    当我使用这个时:

    @Entity
    @Table(name = "\"Graph\"")
    @Getter
    @Setter
    public class Graph {
        @Id
        @Column(name = "\"ID\"\"")
        private Long id;
    
        @Column(name = "\"ResultID\"")
        private Long resultId;
    
        @Column(name = "\"GraphTypeID\"")
        private Long graphTypeID;
    
        @Column(name = "\"SampleTime\"")
        private BINARY_FLOAT sampleTime;
    
        @Column(name = "\"AngleOffset\"")
        private BINARY_FLOAT angleOffset;
    
        @Column(name = "\"GraphValue\"")
        private byte[] graphValue;
    
        @Column(name = "\"AngleFactor\"")
        private BINARY_DOUBLE angleFactor;
    
        @Column(name = "\"TorqueFactor\"")
        private BINARY_DOUBLE torqueFactor;
    
        @Column(name = "\"StartTime\"")
        private BINARY_FLOAT startTime;
    
        @Column(name = "\"EndTime\"")
        private BINARY_FLOAT endTime;
    }
    

    我得到了由以下原因引起的
    :java.sql.SQLSyntaxErrorException:ORA-00911:无效字符

    删除列名中的特殊字符
    \“
    ,这会导致问题。JPA和Oracle驱动程序将正确处理所有问题

    您可以省略
    ,ANSI SQL也可以

    CREATE TABLE NEW_TABLE (ID NUMBER(19) NOT NULL , NAME VARCHAR2(19) NOT NULL);
    

    假设表中有一列的名称为“id”,如下所示:

    然后要使用特殊字符(),需要添加转义序列,如下所示:

        @Column(name="`\"id\"`")
        private int id;
    
    结果将是一列,名称为(“id”)。
    请查找以下更新的图形POJO类:

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table (name="`\"Graph\"`")
    @Getter
    @Setter
    public class Graph {
    @Id
    @Column (name="`\"ID\"`")
    private Long id;
    
    @Column (name="`\"ResultID\"`")
    private Long resultId;
    
    @Column(name="`\"GraphTypeID\"`")
    private Long graphTypeID;
    
    @Column (name="`\"SampleTime\"`")
    private BINARY_FLOAT sampleTime; 
    
    @Column (name="`\"AngleOffset\"`")
    private BINARY_FLOAT angleOffset;
    
    @Column (name="`\"GraphValue\"`")
    private byte[] graphValue;
    
    @Column (name="`\"AngleFactor\"`")
    private BINARY_DOUBLE angleFactor;
    
    @Column (name="`\"TorqueFactor\"`")
    private BINARY_DOUBLE torqueFactor;
    
    @Column (name="`\"StartTime\"`")
    private BINARY_FLOAT startTime;
    
    @Column (name="`\"EndTime\"`")
    private BINARY_FLOAT endTime;
    }
    

    要从图表表中检索数据,请在Hibernate中使用以下代码:

    Query query=session.createSQLQuery("SELECT * FROM `\" Graph \"` WHERE `\"ID\"`=1 ");
    

    希望这对您有所帮助。

    您的查询等于
    SELECT*FROM Graph,其中ID=1
    请参见