Я получаю исключение "Не удалось найти таблицу SQL для типа" при выполнении запроса SQL в кэше Ignite.Эквивалент ScanQuery успешно выполняется в том же кэше.
nb - обратите внимание, что из моего кода я создаю кэш после запуска Ignite.Это намеренно, поскольку я хочу иметь возможность динамически создавать кэши.
Класс сотрудника:
public class Employee implements Serializable {
@QuerySqlField (index = true)
private final Integer empNo;
@QuerySqlField
private String name;
@QuerySqlField
private Department dept;
@QuerySqlField
private Integer salary;
Создать и заполнить кэш сотрудника:
CacheConfiguration<Integer, Employee> empCacheCfg = new CacheConfiguration<>();
empCacheCfg.setName("Employee");
IgniteCache<Integer, Employee> empCache = ignite.getOrCreateCache(empCacheCfg);
empCache.put(0, new Employee(0, "Bill", deptCache.get("POT"), 20000));
empCache.put(1, new Employee(1, "Ben", deptCache.get("POT"), 21000));
empCache.put(2, new Employee(2, "Little Weed", deptCache.get("PLANT"), 15000));
empCache.put(3, new Employee(3, "The Gardner", deptCache.get("SVC"), 30000));
SQLQuery overКэш сотрудника:
SqlQuery sql = new SqlQuery("Employee", "salary > ?");
try (QueryCursor<Cache.Entry<Integer, Employee>> cursor2 =
empCache.query(sql.setArgs(20000)))
{
for(var e2 : cursor2)
{
System.out.println(String.format("Employee: %s", e2.getValue().getName()));
}
}
catch(Exception e)
{
String exmsg = e.getMessage();
System.out.println(exmsg);
}