Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Ignite 使用交叉缓存联接进行内部联接时出错_Ignite - Fatal编程技术网

Ignite 使用交叉缓存联接进行内部联接时出错

Ignite 使用交叉缓存联接进行内部联接时出错,ignite,Ignite,我有一个用于studentinfo类的studentinfo缓存和一个用于classinfo的classinfo缓存, 这两个类用于连接(Student具有classId属性) 使用以下代码段 SqlFieldsQuery innerJoinSQL = new SqlFieldsQuery( "select StudentInfo.studentId, StudentInfo.name, StudentInfo.classId from StudentInfo a

我有一个用于studentinfo类的studentinfo缓存和一个用于classinfo的classinfo缓存, 这两个类用于连接(Student具有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
线程“main”javax.cache.CacheException中的异常:未能分析查询:从StudentInfo a中选择a.studentId、a.name、a.classId、b.name,“class_cache”。a.classId上的ClassInfo b=b.classId
位于org.apache.ignite.internal.processors.query.h2.igniteh2index.queryTwoStep(igniteh2index.java:1137)
位于org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:732)
位于org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:730)
位于org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36)
位于org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:1666)
位于org.apache.ignite.internal.processors.query.GridQueryProcessor.queryTwoStep(GridQueryProcessor.java:730)
位于org.apache.ignite.internal.processors.cache.IgniteCacheProxy.query(IgniteCacheProxy.java:700)
位于ignite.sqlgrid.join.IgniteSQLJoinQueryTest.main(IgniteSQLJoinQueryTest.java:75)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)中
位于java.lang.reflect.Method.invoke(Method.java:613)
位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
造成原因:org.h2.jdbc.JdbcSQLException:SQL语句“从STUDENTINFO A中选择A.STUDENTID、A.NAME、A.CLASSID、B.NAME,'class_cache'[*].CLASSINFO B ON A.CLASSID=B.CLASSID”;预期的“标识符”;SQL语句:
从StudentInfo a“class_cache”中选择a.studentId、a.name、a.classId、b.name。a.classId=b.classId[42001-191]
位于org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
位于org.h2.message.DbException.getSyntaxError(DbException.java:205)
位于org.h2.command.Parser.readIdentifierWithSchema(Parser.java:3115)
位于org.h2.command.Parser.readTableFilter(Parser.java:1202)
位于org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1884)
位于org.h2.command.Parser.parseSelectSimple(Parser.java:2032)
位于org.h2.command.Parser.parseSelectSub(Parser.java:1878)
位于org.h2.command.Parser.parseSelectUnion(Parser.java:1699)
位于org.h2.command.Parser.parseSelect(Parser.java:1687)
位于org.h2.command.Parser.parsePrepared(Parser.java:443)
位于org.h2.command.Parser.parse(Parser.java:315)
位于org.h2.command.Parser.parse(Parser.java:287)
位于org.h2.command.Parser.prepareCommand(Parser.java:252)
位于org.h2.engine.Session.prepareLocal(Session.java:560)
位于org.h2.engine.Session.prepareCommand(Session.java:501)
位于org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1188)
在org.h2.jdbc.JdbcPreparedStatement。(JdbcPreparedStatement.java:73)
在org.h2.jdbc.JdbcConnection.prepareStatement上(JdbcConnection.java:276)
位于org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatement(IgniteH2Indexing.java:406)
位于org.apache.ignite.internal.processors.query.h2.igniteh2index.queryTwoStep(igniteh2index.java:1121)
... 还有12个

有人能帮我解决问题吗?谢谢

看来我解决了问题。 我的两个pojo(StudentInfo和ClassInfo)对于每个缓存都有一个相同的列,名为
classId
。看起来只有一个pojo可以使用classId字段上的注释
@QuerySqlField(index=true)
设置index=true


但我不确定Ingite是否有这样的限制。如果有人知道,请确认,谢谢

您最初的问题是引用缓存名称无效。无效?我不明白你的意思。你能再解释一下吗?对我来说,我没有更改sql,只是将索引更改为false,它就工作了。我不确定这里的实际问题是什么,但你所描述的肯定不是真的(除非有一些疯狂的bug)。如果您可以创建一个带有测试的小型GitHub项目,以便任何人都可以运行它并重现行为,那么就更容易提供帮助。