#ignite
Вопрос:
В нашем продукте мы используем Ignite ClientCache для кэширования объектов. Мы используем объект класса в качестве ключа для хранения в кэше. Теперь, когда я создаю другой объект класса диска и сохраняю его в кэше ClientCache. Здесь я добавляю объект класса диска в кэш базового класса, и после того, как я добавил объект дочернего класса, я обновил некоторые его поля-члены перед удалением. Теперь, когда я вызываю ClientCache.remove() для такого объекта класса диска, он не может найти такой ключ. Поэтому мой вопрос в том, как я могу предоставить пользовательский компаратор, я уже пробовал переопределение функций java equals() и hashcode (), но это не работает.
Комментарии:
1. Я не совсем понимаю, что вы здесь делаете. Можете ли вы поделиться некоторыми образцами кода? Я бы сказал, что Ignite не является базой данных объектов (хотя с некоторых точек зрения она выглядит таковой).
2. Извините за путаницу. Но в моем случае мы используем объект базового класса, который расширяет внешний интерфейс в качестве ключа в
3. Извините за путаницу. В моем случае мы используем объект базового класса, который реализует внешний интерфейс и использует его в качестве ключа в Ignite ClientCache. Теперь я создал еще один класс привода, который расширяет базовый класс. Теперь, когда я создаю ключевой объект для своего класса дисков и добавляю() его в кэш клиента, во время съемного удаления() не может найти этот ключ и возвращает false. Я уже переопределил equals() и hashCode() в своем классе дисков и убедился, что значение хэша, которое я получаю, совпадает со значением хэша во время удаления (), но удалить() все еще не удается. Что я могу сделать в этом случае ?
Ответ №1:
Ignite считает два объекта равными, когда все следующее верно:
- Идентификатор типа один и тот же (один и тот же класс).
- Сериализованное представление (
byte[]
) — это то же самое.
Ignite не использует стандарт equals()
и hashCode()
для сравнений, поскольку механизм БД работает с сериализованными данными. Нет никакого способа переопределить это поведение.