Dear all, I am trying to load two tables data into caches to speed up my queries. table1 contains 564 records, with one primary key as index. definition of table content from java as follows: @QuerySqlField private String orgId; @QuerySqlField(index=true) private String objId; @QuerySqlField private int numRows;
table2 contains 9626 records, with no primary key defined but a group index is defined. definition of table2 from java as follows: @QuerySqlField private String orgId; @QuerySqlField(orderedGroups={@QuerySqlField.Group( name="objId_fieldName_idx", order=0, descending = true)}) private String objId; @QuerySqlField(orderedGroups={@QuerySqlField.Group( name="objId_fieldName_idx", order=1, descending = true)}) private String fieldName; @QuerySqlField private int fieldNum; @QuerySqlField private int statVal; I defined two caches to load all the data from two tables: the first cache load data from table1, and works fine. but the second cache which load data from table2 cannot load all the data, only few of them. I think this is due to the configuration of cache2 was probability wrong[ because cache content shows that objid was the unique key to retrieve the data record]: final String CACHE_NAME1= IgniteMetaDatabaseFieldStat.class.getSimpleName()+"_Cache"; CacheConfiguration<String, IgniteMetaDatabaseFieldStat> cfg = new CacheConfiguration<String, IgniteMetaDatabaseFieldStat>(CACHE_NAME1); CacheJdbcPojoStoreExampleFactory<String, IgniteMetaDatabaseFieldStat> storeFactory = new CacheJdbcPojoStoreExampleFactory<String,IgniteMetaDatabaseFieldStat>(); storeFactory.setDialect(new OracleDialect()); JdbcType jdbcType = new JdbcType(); jdbcType.setCacheName(CACHE_NAME1); jdbcType.setDatabaseSchema("besdb"); jdbcType.setDatabaseTable("data_base_field_stat"); <b> jdbcType.setKeyType("java.lang.String"); jdbcType.setKeyFields(new JdbcTypeField(Types.VARCHAR, "OBJID", String.class, "objId") /* ,new JdbcTypeField(Types.VARCHAR, "FIELDNAME", String.class, "fieldName")*/); </b> jdbcType.setValueType("org.apache.ignite.examples.model.IgniteMetaDatabaseFieldStat"); jdbcType.setValueFields( new JdbcTypeField(Types.VARCHAR,"ORGID", String.class, "orgId"), new JdbcTypeField(Types.VARCHAR,"OBJID", String.class, "objId"), new JdbcTypeField(Types.VARCHAR,"FIELDNAME", String.class, "fieldName"), new JdbcTypeField(Types.INTEGER,"FIELDNUM", Integer.class, "fieldNum"), new JdbcTypeField(Types.INTEGER,"STAT_VAL", Integer.class, "statVal") ); storeFactory.setTypes(jdbcType); cfg.setCacheStoreFactory(storeFactory); // Set atomicity as transaction, since we are showing transactions in the example. cfg.setAtomicityMode(CacheAtomicityMode.ATOMIC); cfg.setIndexedTypes(String.class, IgniteMetaDatabaseFieldStat.class); cfg.setReadThrough(true); cfg.setWriteThrough(true); cfg.setCacheMode(CacheMode.PARTITIONED); //cfg.setAtomicityMode(CacheAtomicityMode.ATOMIC); //cfg.setMemoryMode(CacheMemoryMode.OFFHEAP_TIERED); //cfg.setOffHeapMaxMemory(64 * 1024L * 1024L); //cfg.setStartSize(100 * 1024 * 1024); cfg.setBackups(0); please note the jdbcType.setKeyTypes and setKeyFields part. I want to use the <b>groupIndex</b> as the cache key setting, which was defined in the annotation part of @QuerySqlField(orderedGroups={@QuerySqlField.Group( name="objId_fieldName_idx", order=0, descending = true)}) private String objId; @QuerySqlField(orderedGroups={@QuerySqlField.Group( name="objId_fieldName_idx", order=1, descending = true)}) private String fieldName; but I don't know how to do that, in my example I just use objid as the key. In this case, if there are duplicate values come into the cache, the rest values was ignored. How to setup the correct key for jdbcTypes in my cache configuration? Best regards, Kevin