2016-12-08 6 views
1

私はStudentInfoクラスのstudentinfoキャッシュとCLASSINFOためCLASSINFOキャッシュを持って参加し、 これらの2つのクラスはでエラーが

(学生がCLASSIDの属性を持っている)に参加行うために使用されていますコードスニペット以下、

SqlFieldsQuery innerJoinSQL = new SqlFieldsQuery(
      "select StudentInfo.studentId, StudentInfo.name, StudentInfo.classId from StudentInfo as a, " + 
      "\"class_cache\".ClassInfo as b where a.classId = b.classId"); 
cursor = studentCache.query(innerJoinSQL); 
for (List data : cursor) { 
    System.out.println(String.format("studentId %s, studentName %s, classId %s, className %s", data.get(0), data.get(1), data.get(2), data.get(3))); 
} 

は、私は、次の例外が発生しました:

Exception in thread "main" javax.cache.CacheException: Failed to parse query: select a.studentId, a.name, a.classId, b.name from StudentInfo a, 'class_cache'.ClassInfo b on a.classId = b.classId 
    at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.queryTwoStep(IgniteH2Indexing.java:1137) 
    at org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:732) 
    at org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:730) 
    at org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36) 
    at org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:1666) 
    at org.apache.ignite.internal.processors.query.GridQueryProcessor.queryTwoStep(GridQueryProcessor.java:730) 
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxy.query(IgniteCacheProxy.java:700) 
    at ignite.sqlgrid.join.IgniteSQLJoinQueryTest.main(IgniteSQLJoinQueryTest.java:75) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55) 
    at java.lang.reflect.Method.invoke(Method.java:613) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 
Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "SELECT A.STUDENTID, A.NAME, A.CLASSID, B.NAME FROM STUDENTINFO A, 'class_cache'[*].CLASSINFO B ON A.CLASSID = B.CLASSID "; expected "identifier"; SQL statement: 
select a.studentId, a.name, a.classId, b.name from StudentInfo a, 'class_cache'.ClassInfo b on a.classId = b.classId [42001-191] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 
    at org.h2.message.DbException.getSyntaxError(DbException.java:205) 
    at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:3115) 
    at org.h2.command.Parser.readTableFilter(Parser.java:1202) 
    at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1884) 
    at org.h2.command.Parser.parseSelectSimple(Parser.java:2032) 
    at org.h2.command.Parser.parseSelectSub(Parser.java:1878) 
    at org.h2.command.Parser.parseSelectUnion(Parser.java:1699) 
    at org.h2.command.Parser.parseSelect(Parser.java:1687) 
    at org.h2.command.Parser.parsePrepared(Parser.java:443) 
    at org.h2.command.Parser.parse(Parser.java:315) 
    at org.h2.command.Parser.parse(Parser.java:287) 
    at org.h2.command.Parser.prepareCommand(Parser.java:252) 
    at org.h2.engine.Session.prepareLocal(Session.java:560) 
    at org.h2.engine.Session.prepareCommand(Session.java:501) 
    at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1188) 
    at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:73) 
    at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:276) 
    at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatement(IgniteH2Indexing.java:406) 
    at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.queryTwoStep(IgniteH2Indexing.java:1121) 
    ... 12 more 

問題があるいくつかの助けができますか?ありがとう!

答えて

-2

私は問題を理解しました。 各キャッシュの2つのpojo(StudentInfoとClassInfo)には、classIdという同じ列があります。 1つのpojoだけがclassIdフィールドの@QuerySqlField(index = true)という注釈でindex = trueを設定できるように見える

しかし、私はIngiteにこのような制約があるかどうかはわかりません。誰かが知っているなら、確認してください、ありがとう!

+1

最初の問題は無効なキャッシュ名の引用でした。 –

+0

が無効ですか?私はあなたを理解していませんでした。もっと説明できますか?私にとっては、SQLを変更せず、インデックスをfalseに変更するだけで動作します。 – Tom

+0

ここでは実際の問題は何か分かりませんが、何か説明したことは間違いなく真実ではありません(クレイジーバグがない限り)。誰でもテストを実行して動作を再現できるように、テストで小さなGitHubプロジェクトを作成することができれば助けが簡単です。 –