Когда я выполняю простой запрос выбора из HQL, я получаю ОШИБКУ: ORA-00933: команда SQL не завершена должным образом (выберите s1_0.id, s1_0.email, s1_0.first_name, s1_0.last_name от Student как s1_0Я знаю, что проблема, похоже, связана с ключевым словом «as» после имени таблицы, хотя мой HQL-запрос является простым «от ученика», я запутался, откуда происходит добавление ключевого слова.
@Entity
@Table(name="Student")
public class Student {
public Student(){
}
public Student(String firstName, String lastName, String email) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
@GenericGenerator(
name = "studentSequenceGenerator",
strategy =
"org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "STUDENT_SEQ"),
@Parameter(name = "initial_value", value = "1"),
@Parameter(name = "increment_size", value = "1")
}
)
@Id
@Column(name="id")
@GeneratedValue(generator = "studentSequenceGenerator")
private Long id;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@Column(name="email")
private String email;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Student [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", email=" + email + "]";
}
}
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(Student.class).buildSessionFactory();
Session session = factory.getCurrentSession();
session.beginTransaction();
List<Student> std = (List<Student>)session.createQuery("from Student").getResultList();
session.getTransaction().commit();
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="show_sql">true</property>
Hibernate: select s1_0.id, s1_0.email, s1_0.first_name, s1_0.last_name from Student as s1_0
Oct 15, 2019 3:01:18 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 933, SQLState: 42000
Oct 15, 2019 3:01:18 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ORA-00933: SQL command not properly ended
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [select s1_0.id, s1_0.email, s1_0.first_name, s1_0.last_name from Student as s1_0]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
at org.hibernate.query.internal.AbstractQuery.list(AbstractQuery.java:1311)
at org.hibernate.query.internal.AbstractQuery.getSingleResult(AbstractQuery.java:1328)
at com.hibernate.demo.ReadStudentDemo.main(ReadStudentDemo.java:29)
Caused by: org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [select s1_0.id, s1_0.email, s1_0.first_name, s1_0.last_name from Student as s1_0]
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.internal.values.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:103)
at org.hibernate.sql.results.internal.values.DeferredResultSetAccess.getResultSet(DeferredResultSetAccess.java:54)
at org.hibernate.sql.results.internal.values.JdbcValuesResultSetImpl.processNext(JdbcValuesResultSetImpl.java:110)
at org.hibernate.sql.results.internal.values.AbstractJdbcValues.next(AbstractJdbcValues.java:32)
at org.hibernate.sql.results.internal.RowProcessingStateStandardImpl.next(RowProcessingStateStandardImpl.java:72)
at org.hibernate.sql.exec.internal.ListResultsConsumer.consume(ListResultsConsumer.java:57)
at org.hibernate.sql.exec.internal.ListResultsConsumer.consume(ListResultsConsumer.java:24)
at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:191)
at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.list(JdbcSelectExecutorStandardImpl.java:68)
at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:167)
at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:242)
at org.hibernate.query.internal.AbstractQuery.list(AbstractQuery.java:1302)
... 2 more
Caused by: java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494)
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1052)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:537)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:255)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:610)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:253)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:86)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:765)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:921)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1099)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3640)
at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1384)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3687)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1165)
at org.hibernate.sql.results.internal.values.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:98)
... 13 more
Caused by: Error : 933, Position : 73, Sql = select s1_0.id, s1_0.email, s1_0.first_name, s1_0.last_name from Student as s1_0, OriginalSql = select s1_0.id, s1_0.email, s1_0.first_name, s1_0.last_name from Student as s1_0, Error Msg = ORA-00933: SQL command not properly ended
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:498)
... 28 more
Oct 15, 2019 3:01:18 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop