Java 使用JDBC连接在Apache Ignite集群中插入记录时发生异常

Java 使用JDBC连接在Apache Ignite集群中插入记录时发生异常,java,insert,key,ignite,Java,Insert,Key,Ignite,我一直在努力使用JDBC连接在ApacheIgnite缓存上运行insert查询。我已使用以下配置创建缓存: CacheConfiguration cacheCfg=new CacheConfiguration(“SQL\u PUBLIC\u MYAPPLICATION”); cacheCfg.setCacheMode(CacheMode.REPLICATED); cacheCfg.setIndexedTypes(Long.class,MyApplication.class); cacheCfg

我一直在努力使用JDBC连接在ApacheIgnite缓存上运行insert查询。我已使用以下配置创建缓存:

CacheConfiguration cacheCfg=new CacheConfiguration(“SQL\u PUBLIC\u MYAPPLICATION”);
cacheCfg.setCacheMode(CacheMode.REPLICATED);
cacheCfg.setIndexedTypes(Long.class,MyApplication.class);
cacheCfg.setSqlSchema(“公共”);
setCacheStoreFactory(FactoryBuilder.factoryOf(CacheMyApplicationStore.class));
cacheCfg.setReadThrough(true);
cacheCfg.setWriteThrough(true);
FifoEvictionPolicy逐出=新的FifoEvictionPolicy();
驱逐。setMaxSize(100_000);
IgniteCache cache=getIgnite().getOrCreateCache(cacheCfg);
cache.loadCache(null,100_000);
MyApplication.java
公共类MyApplication{
@QuerySqlField(index=true,orderedGroups={@QuerySqlField.Group(name=“idx3”,order=0)})
私人长ID;
@QuerySqlField(index=true,orderedGroups={@QuerySqlField.Group(name=“idx3”,order=1)})
私有字符串名称;
@QuerySqlField
私有字符串描述;
}
我能够使用JDBC连接更新或删除缓存中的记录,但插入不起作用。尝试使用以下代码插入时出现异常:

Connection conn=DriverManager.getConnection(“jdbc:ignite:thin://url:4000");
try(PreparedStatement stmt=conn.prepareStatement(“插入MyApplication(ID、名称、描述)值(1,‘TestApp’、‘待删除’))){
标准设定长度(1,1L);
stmt.setString(2,“TestApp”);
stmt.设置字符串(3,“待删除”);
stmt.executeUpdate();
}
例外情况:
任何帮助都将不胜感激。

根本原因如下:

Caused by: class org.apache.ignite.IgniteCheckedException: Key is missing from query
您在
INSERT
语句中提供的所有值都属于value对象,因此Ignite无法为条目创建键对象并引发此异常


要解决此问题,您应该为密钥对象创建一个类(例如,
MyApplicationKey
)并将
ID
字段移到那里。

根本原因如下:

Caused by: class org.apache.ignite.IgniteCheckedException: Key is missing from query
您在
INSERT
语句中提供的所有值都属于value对象,因此Ignite无法为条目创建键对象并引发此异常


要解决这个问题,您应该为key对象创建一个类(例如,
MyApplicationKey
)并将
ID
字段移到那里。

只需使用and命令配置缓存和SQL索引,特别是如果您计划使用SQL操作启动access


如果仍然需要键值、计算或机器学习API,请检查并演示如何在使用SQL DDL命令定义缓存时执行此操作。

只需使用and命令配置缓存和SQL索引,特别是如果您计划使用SQL操作启动access


如果仍然需要key-value、计算或机器学习API,那么检查一下,看看如何在使用SQL DDL命令定义缓存时做到这一点。

我已经尝试为key对象创建一个类(MyApplicationKey和AffinityKey)。他们两人都处理了第一次插入,但随后的插入仍然失败,但原因不同:异常:err=class org.apache.ignite.internal.processors.query.IgniteSQLException:insert期间重复键[key=org.apache.ignite.cache.affinity.AffinityKey[idHash=20914538,hash=1]]。使用JDBC驱动程序插入新记录时,哈希值似乎始终为1。我已尝试为key对象(MyApplicationKey和AffinityKey)创建一个类。他们两人都处理了第一次插入,但随后的插入仍然失败,但原因不同:异常:err=class org.apache.ignite.internal.processors.query.IgniteSQLException:insert期间重复键[key=org.apache.ignite.cache.affinity.AffinityKey[idHash=20914538,hash=1]]。当我使用JDBC驱动程序插入新记录时,哈希值似乎总是1。