Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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
Java 如何解决ignitecheckedexception:确保缓存配置中的所有对象都可序列化_Java_Ignite_Gridgain - Fatal编程技术网

Java 如何解决ignitecheckedexception:确保缓存配置中的所有对象都可序列化

Java 如何解决ignitecheckedexception:确保缓存配置中的所有对象都可序列化,java,ignite,gridgain,Java,Ignite,Gridgain,我正在使用Spring Boot运行Ignite。我的目的是在Ignite中对BinaryObject执行SqlFieldQuery,提到我没有任何实体类,在运行时使用QueryEntity创建实体。这是我的以下代码: CacheConfiguration<Integer, BinaryObject> cachecfg = new CacheConfiguration<>(); cachecfg.setQueryEntities(new ArrayList<

我正在使用Spring Boot运行Ignite。我的目的是在Ignite中对BinaryObject执行SqlFieldQuery,提到我没有任何实体类,在运行时使用QueryEntity创建实体。这是我的以下代码:

 CacheConfiguration<Integer, BinaryObject> cachecfg = new CacheConfiguration<>();   
 cachecfg.setQueryEntities(new ArrayList<QueryEntity>() 
{
 {

            QueryEntity e = new QueryEntity();
            e.setKeyType("java.lang.Integer");
            e.setValueType("BinaryTest");
            e.setFields(new LinkedHashMap<String, String>() {
                {
                    put("name", "java.lang.String");
                }
            });
            add(e);
        }
    });
    cachecfg.setName("MY_CACHE");
    IgniteCache<Integer, BinaryObject> ignitecache = igniteInstance.createCache(cachecfg).withKeepBinary();
    BinaryObjectBuilder builder = igniteInstance.binary().builder("BinaryTest");
    builder.setField("name", "Test");
    ignitecache.put(1, builder.build());
    QueryCursor<List<?>> query = ignitecache.query(new SqlFieldsQuery("select name from BinaryTest"));
    System.out.println(query.getAll());

我可能缺少一些序列化配置。有什么问题吗?

去掉双大括号初始化,在这种情况下,您将得到一个匿名类,它是具有实例初始值设定项的ArrayList的子类。匿名类总是包含对封闭类的引用,在您的例子中,它试图被序列化

因此,请继续:

    CacheConfiguration<Integer, BinaryObject> cachecfg = new CacheConfiguration<>();

    QueryEntity e = new QueryEntity();
    e.setKeyType("java.lang.Integer");
    e.setValueType("BinaryTest");

    LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
    map.put("name", "java.lang.String");
    e.setFields(map);

    ArrayList<QueryEntity> list = new ArrayList<QueryEntity>();
    list.add(e);
    cachecfg.setQueryEntities(list);
    cachecfg.setName("MY_CACHE");
    IgniteCache<Integer, BinaryObject> ignitecache = igniteInstance.createCache(cachecfg).withKeepBinary();
CacheConfiguration cachecfg=new CacheConfiguration();
QueryEntity e=新QueryEntity();
e、 setKeyType(“java.lang.Integer”);
e、 setValueType(“二进制测试”);
LinkedHashMap=新建LinkedHashMap();
map.put(“name”、“java.lang.String”);
e、 设定域(map);
ArrayList=新建ArrayList();
列表.添加(e);
cachecfg.setQueryEntities(列表);
setName(“我的缓存”);
IgniteCache IgniteCache=igniteInstance.createCache(cachecfg).withKeepBinary();
    CacheConfiguration<Integer, BinaryObject> cachecfg = new CacheConfiguration<>();

    QueryEntity e = new QueryEntity();
    e.setKeyType("java.lang.Integer");
    e.setValueType("BinaryTest");

    LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
    map.put("name", "java.lang.String");
    e.setFields(map);

    ArrayList<QueryEntity> list = new ArrayList<QueryEntity>();
    list.add(e);
    cachecfg.setQueryEntities(list);
    cachecfg.setName("MY_CACHE");
    IgniteCache<Integer, BinaryObject> ignitecache = igniteInstance.createCache(cachecfg).withKeepBinary();