2016-10-20 8 views
3

私は、キーをStringとして使用し、オブジェクトのコレクション(類似のタイプ)の値としてvalueを使用しています。オブジェクトのリストとして値を持つクエリキャッシュを点火します。

ここで、キャッシュに保存されている生徒を照会して、5人のトップスコアを挙げましょう。

CacheConfiguration<String, List<Student>> cfg = new CacheConfiguration<String, List<Student>>("students"); 
ignite = Ignition.start("/usr/localc/ignite/examples/config/example-ignite.xml"); 
cfg.setIndexedTypes(String.class, List.class); 

以下のような構成を定義し

は今、私はいずれかの方法を問い合わせるために私を助けることができます次に

SqlFieldsQuery qry = new SqlFieldsQuery("select count(*) from Person"); 

のようなクエリが

Exception in thread "main" java.lang.AbstractMethodError: org.apache.ignite.internal.processors.query.h2.opt.GridH2Table$ScanIndex.getCost(Lorg/h2/engine/Session;[I[Lorg/h2/table/TableFilter;ILorg/h2/result/SortOrder;Ljava/util/HashSet;)D 
at org.h2.table.TableFilter.getBestPlanItem(TableFilter.java:203) 
at org.h2.table.Plan.calculateCost(Plan.java:123) 
at org.h2.command.dml.Optimizer.testPlan(Optimizer.java:183) 
at org.h2.command.dml.Optimizer.calculateBestPlan(Optimizer.java:79) 
at org.h2.command.dml.Optimizer.optimize(Optimizer.java:242) 
at org.h2.command.dml.Select.preparePlan(Select.java:1014) 
at org.h2.command.dml.Select.prepare(Select.java:878) 
at org.h2.command.Parser.prepareCommand(Parser.java:259) 
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:1202) 
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:73) 
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:290) 
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) 
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 com.tcs.enm.processor.Main.main(Main.java:47) 

のような例外が発生しました解雇しました? ?

答えて

2

このようなクエリを実行するには、それぞれStudentを別のエントリとして保存する必要があります。 Studentクラスは、フィールドとインデックスとキャッシュの設定を定義するすべての注釈は、次のようになります持っている必要があります。詳細については

cfg.setIndexedTypes(String.class, Student.class); 

を、このマニュアルを参照してください:この問題があり、将来的に誰のためにhttps://apacheignite.readme.io/docs/sql-queries

+0

私の場合、数百万の学生がいる...他のビジネスケースのために私は学生のリストとして価値が必要であり、キーは年、大学、大学などかもしれない。 – sridhar

+0

なぜあなたは欲しいこれらは鍵になる?それらを値フィールドとして追加し、高速検索用のインデックスを設定します。 –

1

を、このエラーメッセージは、間違ったバージョンのH2を使用している可能性があります。

http://apache-ignite-users.70518.x6.nabble.com/Exception-while-trying-to-access-cache-via-JDBC-API-td8648.html#a8651

あなたがのIgnite 1.7を使用している場合は、1.4.191をh2database必要です。 h2database 1.4.192では、Igniteが処理されなかった192の変更があるため、この質問で例外が発生することに注意してください。

私のパッケージを通過してH2バージョンを1.4.191に変更しました。私の問題を解決しました。

関連する問題