Java 原因:org.hibernate.exception.sqlgrammareexception:JDBC异常执行SQL

Java 原因:org.hibernate.exception.sqlgrammareexception:JDBC异常执行SQL,java,oracle,hibernate,jpa,jdbc,Java,Oracle,Hibernate,Jpa,Jdbc,Java package com.jpaExample; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class PersistStudent { public static void main

Java

package com.jpaExample;
    
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;
    
    public class PersistStudent {
        
        public static void main(String[] args)
        {
            EntityManagerFactory emf= Persistence.createEntityManagerFactory("Student_details");
            
            EntityManager em=emf.createEntityManager();
            
            em.getTransaction().begin();
            
            StudentEntity s=em.find(StudentEntity.class,2);
            
            //em.remove(s);
            
            System.out.println("Before update");
            
            System.out.println(s.getId());
            System.out.println(s.getName());
            System.out.println(s.getMarks());
            
            s.setMarks(92);
            
            System.out.println("after update");
            
            System.out.println(s.getId());
            System.out.println(s.getName());
            System.out.println(s.getMarks());   
            
            em.getTransaction().commit();
        
            emf.close();
            em.close();
                                
        }
    
    }
StudentEntity.java

    package com.jpaExample;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    
    @Table(name="studentdetails")
    public class StudentEntity {
        
        
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO) 
        
        private int id;
        private String name;
        private int marks;
        
        public StudentEntity()
        {
            super();
        }
        
        public StudentEntity(int id, String name, int marks)
        {
            this.id=id;
            this.name=name;
            this.marks=marks;
            
        }
        
        public  int getId()
        {
            return id;
        }
        public void setId(int id)
        {
            this.id=id;
        }
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getMarks() {
            return marks;
        }
    
        public void setMarks(int marks) {
            this.marks = marks;
        } 
    }
我放在META-INF中的Persistence.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
      http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
      version="2.1">
      
      <persistence-unit name="Student_details" transaction-type ="RESOURCE_LOCAL">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      
      <class>com.jpaExample.StudentEntity</class>
      
      <properties>
       <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"></property>
       <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
       <property name="javax.persistence.jdbc.user" value="student"></property>
       <property name="javax.persistence.jdbc.password" value="student"></property>
      </properties>
    
      
      </persistence-unit>
      </persistence>

org.hibernate.ejb.HibernatePersistence
com.jpaExample.StudentEntity
每当我试图运行这段代码时,我都会遇到这样的错误,我使用oracle作为JDBC驱动程序,它的意思是SQL grammatic error.org.hibernate.exception.sqlgrammareexception:JDBC异常执行SQL[从studentdetails中选择s1_0.id,s1_0.marks,s1_0.name作为s1_0,其中s1_0.id=?] 线程“main”javax.persistence.PersistenceException中的异常:org.hibernate.Exception.sqlgrammareException:执行SQL的JDBC异常[从studentdetails中选择s1_0.id、s1_0.marks、s1_0.name作为s1_0,其中s1_0.id=?] 位于org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)

2021年5月5日下午3:18:54 org.hibernate.jpa.boot.spi.ProviderChecker hibernateProviderNamesContain
警告:HH015016:遇到不推荐使用的javax.persistence.spi.PersistenceProvider[org.hibernate.ejb.HibernatePersistence];将改用[org.hibernate.jpa.HibernatePersistenceProvider]。
2021年5月5日下午3:18:54 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
信息:HH000204:正在处理PersistenceUnitInfo[姓名:学生信息]
2021年5月5日下午3:18:54 org.hibernate.Version日志版本
信息:hh000412:Hibernate核心{6.0.0.Alpha4}
2021年5月5日下午3:18:54 org.hibernate.annotations.common.reflection.java.JavaReflectionManager
信息:HCANN000001:Hibernate Commons注释{5.1.0.Final}
2021年5月5日下午3:18:55 org.hibernate.engine.jdbc.connections.internal.driverManager连接提供MPL配置
警告:HHH10001002:使用Hibernate内置连接池(不用于生产!)
2021年5月5日下午3:18:55 org.hibernate.engine.jdbc.connections.internal.driverManager连接ProviderImpl buildCreator
信息:HHH10001005:在URL[jdbc:oracle:thin:@localhost:1521:xe]处使用驱动程序[oracle.jdbc.driver.OracleDriver]
2021年5月5日下午3:18:55 org.hibernate.engine.jdbc.connections.internal.driverManager连接ProviderImpl buildCreator
信息:HHH10001001:连接属性:{user=student,password=**}
2021年5月5日下午3:18:55 org.hibernate.engine.jdbc.connections.internal.driverManager连接ProviderImpl buildCreator
信息:HHH10001003:自动提交模式:错误
2021年5月5日下午3:18:55 org.hibernate.engine.jdbc.connections.internal.driverManager连接ProviderImpl$PooledConnections
信息:HH000115:休眠连接池大小:20(最小值=1)
2021年5月5日下午3:18:55 org.hibernate.dialogue.dialogue
信息:HH000400:使用方言:org.hibernate.dialogue.Oracle10gDialogue
2021年5月5日下午3:18:57 org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
信息:hh000490:使用JtaPlatform实现:[org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2021年5月5日下午3:18:57 org.hibernate.engine.jdbc.spi.SqlExceptionHelper日志异常
警告:SQL错误:933,SQLState:42000
2021年5月5日下午3:18:57 org.hibernate.engine.jdbc.spi.SqlExceptionHelper日志异常
错误:ORA-00933:SQL命令未正确结束
2021年5月5日下午3:18:57 org.hibernate.event.internal.DefaultLoadEventListener doOnLoad
信息:HH000327:执行load命令时出错:org.hibernate.exception.sqlgrammareexception:JDBC异常执行SQL[从studentdetails中选择s1_0.id、s1_0.marks、s1_0.name作为s1_0,其中s1_0.id=?]
线程“main”javax.persistence.PersistenceException中的异常:org.hibernate.Exception.sqlgrammareException:执行SQL的JDBC异常[从studentdetails中选择s1_0.id、s1_0.marks、s1_0.name作为s1_0,其中s1_0.id=?]
位于org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
位于org.hibernate.internal.SessionImpl.find(SessionImpl.java:2805)
位于org.hibernate.internal.SessionImpl.find(SessionImpl.java:2737)
位于com.jpaExample.PersistStudent.main(PersistStudent.java:17)
原因:org.hibernate.exception.sqlgrammareexception:JDBC异常执行SQL[从studentdetails中选择s1_0.id、s1_0.marks、s1_0.name作为s1_0,其中s1_0.id=?]
位于org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)
位于org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
位于org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
位于org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
位于org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:111)
位于org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.getResultSet(DeferredResultSetAccess.java:54)
位于org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.processNext(JdbcValuesResultSetImpl.java:113)
在org.hibernate.sql.results.jdbc.internal.AbstractJdbcValues.next(AbstractJdbcValues.java:33)
位于org.hibernate.sql.results.internal.RowProcessingStateStandardImpl.next(RowProcessingStateStandardImpl.java:67)
位于org.hibernate.sql.results.spi.ListResultsConsumer.Consumer(ListResultsConsumer.java:56)
位于org.hibernate.sql.results.spi.ListResultsConsumer.Consumer(ListResultsConsumer.java:23)
位于org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:191)
位于org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.list(JdbcSelectExecutorStandardImpl.java:71)
位于org.hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:123)
位于org.hibernate.loader.ast.internal.SingleIdEntityLoaderStandardImpl.load(SingleIdEntityLoaderStandardImpl.java:62)
在org.hibernate.persister.entity.AbstractEn
May 05, 2021 3:18:54 PM org.hibernate.jpa.boot.spi.ProviderChecker hibernateProviderNamesContain
WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; [org.hibernate.jpa.HibernatePersistenceProvider] will be used instead.
May 05, 2021 3:18:54 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [name: Student_details]
May 05, 2021 3:18:54 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {6.0.0.Alpha4}
May 05, 2021 3:18:54 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
May 05, 2021 3:18:55 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
May 05, 2021 3:18:55 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [oracle.jdbc.driver.OracleDriver] at URL [jdbc:oracle:thin:@localhost:1521:xe]
May 05, 2021 3:18:55 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=student, password=****}
May 05, 2021 3:18:55 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
May 05, 2021 3:18:55 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
May 05, 2021 3:18:55 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.Oracle10gDialect
May 05, 2021 3:18:57 PM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
May 05, 2021 3:18:57 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 933, SQLState: 42000
May 05, 2021 3:18:57 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ORA-00933: SQL command not properly ended

May 05, 2021 3:18:57 PM org.hibernate.event.internal.DefaultLoadEventListener doOnLoad
INFO: HHH000327: Error performing load command : org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [select s1_0.id, s1_0.marks, s1_0.name from studentdetails as s1_0 where s1_0.id = ?]
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [select s1_0.id, s1_0.marks, s1_0.name from studentdetails as s1_0 where s1_0.id = ?]
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
    at org.hibernate.internal.SessionImpl.find(SessionImpl.java:2805)
    at org.hibernate.internal.SessionImpl.find(SessionImpl.java:2737)
    at com.jpaExample.PersistStudent.main(PersistStudent.java:17)
Caused by: org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [select s1_0.id, s1_0.marks, s1_0.name from studentdetails as s1_0 where s1_0.id = ?]
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
    at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:111)
    at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.getResultSet(DeferredResultSetAccess.java:54)
    at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.processNext(JdbcValuesResultSetImpl.java:113)
    at org.hibernate.sql.results.jdbc.internal.AbstractJdbcValues.next(AbstractJdbcValues.java:33)
    at org.hibernate.sql.results.internal.RowProcessingStateStandardImpl.next(RowProcessingStateStandardImpl.java:67)
    at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:56)
    at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:23)
    at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:191)
    at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.list(JdbcSelectExecutorStandardImpl.java:71)
    at org.hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:123)
    at org.hibernate.loader.ast.internal.SingleIdEntityLoaderStandardImpl.load(SingleIdEntityLoaderStandardImpl.java:62)
    at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4432)
    at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:567)
    at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:535)
    at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:208)
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:330)
    at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:108)
    at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:74)
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)
    at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1142)
    at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1131)
    at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:167)
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2239)
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.lambda$load$1(SessionImpl.java:2220)
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.perform(SessionImpl.java:2176)
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2220)
    at org.hibernate.internal.SessionImpl.find(SessionImpl.java:2770)
    ... 2 more
Caused by: java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:951)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:513)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:208)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:886)
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1175)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1296)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3613)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3657)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1495)
    at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:102)
    ... 28 more