JPAで基本的なCRUDデータベースを作成しようとしていますが、「読み取り」部分に固執しています。クライアントに関する情報を格納する2つのフィールドを持つクライアントテーブルが作成されていますが、何らかの理由で基本的なJPA TypedQueryが '無効な識別子'でヒットすることなく照会できないようです。私はここに創造のコードを持っていて、何も外れているようには見えません。ORA-00904 JPA EclipseLink 2.1で無効な識別子
create table Client (
cid NUMBER PRIMARY KEY,
fname VARCHAR2(255) NOT NULL,
lname VARCHAR2(255) NOT NULL,
email VARCHAR2(255),
phone VARCHAR2(255),
address VARCHAR(255) NOT NULL,
age number NOT NULL
);
そして、私はクラスを照会するために使用しているここのコード、それだけで基本的なTypedQuery
です。
TypedQuery<Client> query = em.createQuery("SELECT a FROM Client a", Client.class);
List<Client> results = query.getResultList();
そして(フォーマットするためのスニペットに投げ込ま)出力:
[EL Info]: 2017-11-29 14:56:23.809--ServerSession(1905114489)--EclipseLink, version: Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd
[EL Info]: connection: 2017-11-29 14:56:24.091--ServerSession(1905114489)--file:////COMPHOME/homedir$/X00136103/Documents/CA2BANKACCOUNT/build/classes/_CA2BANKACCOUNTPU login successful
[EL Warning]: 2017-11-29 14:56:24.356--UnitOfWork(48522228)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00904: "PHONE": invalid identifier
Error Code: 904
Exception in thread "main" javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Call: SELECT CID, address, age, email, firstname, lastname, phone FROM Client
Query: ReadAllQuery(referenceClass=Client sql="SELECT CID, address, age, email, firstname, lastname, phone FROM Client")
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00904: "PHONE": invalid identifier
Error Code: 904
Call: SELECT CID, address, age, email, firstname, lastname, phone FROM Client
Query: ReadAllQuery(referenceClass=Client sql="SELECT CID, address, age, email, firstname, lastname, phone FROM Client")
\t at org.eclipse.persistence.internal.jpa.QueryImpl.getDetailedException(QueryImpl.java:378)
\t at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:260)
\t at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:469)
\t at model.dbOperations.viewClients(dbOperations.java:21)
\t at test.Test.main(Test.java:18)
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00904: "PHONE": invalid identifier
Error Code: 904
Call: SELECT CID, address, age, email, firstname, lastname, phone FROM Client
Query: ReadAllQuery(referenceClass=Client sql="SELECT CID, address, age, email, firstname, lastname, phone FROM Client")
\t at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:340)
\t at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:682)
\t at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:558)
\t at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2002)
\t at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570)
\t at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:242)
\t at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
\t at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:299)
\t at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:694)
\t at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2738)
\t at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2691)
\t at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:495)
\t at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1168)
\t at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899)
\t at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1127)
\t at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:403)
\t at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1215)
\t at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
\t at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804)
\t at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1786)
\t at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1751)
\t at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:258)
\t ... 3 more
Caused by: java.sql.SQLSyntaxErrorException: ORA-00904: "PHONE": invalid identifier
\t at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
\t at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
\t at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1017)
\t at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655)
\t at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
\t at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566)
\t at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215)
\t at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:58)
\t at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:776)
\t at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:897)
\t at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1034)
\t at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3820)
\t at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3867)
\t at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1502)
\t at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:1007)
\t at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:642)
\t ... 23 more
どんなに私が実行しようとするもの、それは表のように思えるん 'を見つけることができません電話'。それは絶えず無効であり、私はなぜそれがわからない。
ORA-00904は、エラーを投げるデータベースであり、EclipseLinkではないことを示します。そのエラーはいくつかの他の時間について以前に尋ねられています。素早くGoogleが原因を説明します。あなたが提供したSQLを作成する際に致命的なタイプミスがあるとすれば、それは実行されたSQLではないと仮定します。 – Gimby
表の記述を行い、 'PHONE'列が存在し、正しく入力されていることを確認しますか? –
@ジンビーええ、私は貼っていたときに何とか括弧を取り除いた。今編集されました。私はすべてのSQLをテストし、提供されたSQLからすべてのテーブルを作成したので、EclipseLinkがエラーを出していることを約100%確信しています。それらはすべて正常に動作しますが、TypedQueryオブジェクトを使用して同じテーブルをクエリしようとすると、エラーがスローされます。 – Grizzly