Hi,
I created SQL cache, but sometimes I want to use it via javax.cache.api and
it doesn't work.
I created cache with SQL:
CREATE TABLE IF NOT EXISTS Person6 (
id varchar primary key ,
city_id int,
name varchar,
age int,
company varchar
) WITH
"template=replicated,backups=1,wrap_key=false,value_type=java.util.HashMap,cache_name=Person6";
insert into PERSON6(ID, CITY_ID, NAME, AGE, COMPANY) values (
'1', 1, 'TEST', 20, 'Bla'
);
insert into PERSON6(ID, CITY_ID, NAME, AGE, COMPANY) values (
'2', 1, 'TEST2', 20, 'Bla 1'
);
Next I created client and fetching data with SqlFieldQuery works without
problems:
SqlFieldsQuery query = new SqlFieldsQuery("SELECT * from Person6");
FieldsQueryCursor<List<?>> cursor = cache.query(query);
but when I tried to query the cache with get:
IgniteCache<String, Object> cache = ignite.cache("Person6");
System.out.println("CacheSize: " + cache.size(CachePeekMode.PRIMARY));
System.out.println("1: " + cache.get("1"));
I received:
CacheSize: 2
1: null
To solve it I added withKeepBinary():
IgniteCache<String, Object> cache =
ignite.cache("Person6").withKeepBinary();
and then I received valid data:
CacheSize: 2
1: java.util.HashMap [idHash=660595570, hash=-1179353910, CITY_ID=1,
ID=null, NAME=TEST, AGE=20, COMPANY=Bla]
but now I cannot add HashMap to the cache:
Map<String, Object> value = new HashMap<>();
value.put("ID", uuid);
value.put("CITY_ID", 1);
value.put("NAME", "c");
value.put("AGE", 90);
value.put("COMPANY", "AAAAA");
cache. put(uuid, value);
throws:
Exception in thread "main" javax.cache.CacheException: class
org.apache.ignite.IgniteCheckedException: Unexpected binary object class
[type=class
org.apache.ignite.internal.processors.cacheobject.UserCacheObjectImpl]
and adding works only with objects created with BinaryObjectBuilder.
Is it expected behaviour for caches String->HashMap?
--
Pozdrawiam / Regards,
Dominik Przybysz