Какой Android/Java ORM использует "кеширование объектов", как Hibernate?
Я видел кучу вопросов о легких альтернативах Hibernate, особенно для Android. Но какой из них имеет шаблон "Карта идентичности"?
Этот шаблон гарантирует, что любой объект, представляющий строку в БД, существует только один раз в любом сеансе. - Это помогает моей программе быть последовательной: если я где-то изменяю сопоставленный объект, он изменяется везде (потому что все ссылки указывают на один и тот же объект). Не имеет значения, буду ли я повторно извлекать объект с помощью нового запроса к базе данных или по-прежнему останусь с ним из предыдущих вызовов: ORM гарантирует, что все они ведут себя как одно и то же.
Hibernate делает это в "кэше 1-го уровня".
3 ответа
ORMLite - это пакет Android ORM для Android, который начиная с версии 4.26 (выпущен 26.09.2011) содержит первое представление о внутреннем кеше объектов. ORMLite не имеет шаблона "сеанса", но пользователь может внедрить кэш в любой DAO и может сбросить его, когда пожелает. Вот документы для поддержки кеша.
Цитируя это руководство, кеш поддерживает следующие вещи:
- Если вы создаете объект с использованием DAO, он будет добавлен в кеш.
- Когда вы запрашиваете объект, используя DAO, если объект находится в кэше, он будет возвращен. Если его нет в кеше, он будет добавлен в кеш. Это не относится к необработанным методам запросов.
- Если вы обновите объект с помощью базы данных, используя DAO, если он существует в кеше, он будет обновлен.
- Если вы обновляете объект из базы данных, используя DAO, если он существует в кэше, он будет обновлен.
- Если вы удалите объект с помощью DAO, объект будет удален из кэша.
В базовый пакет ORMLite включены 2 реализации кеша объектов. Один, который поддерживает слабые / мягкие ссылки, и другой, который является стандартным LRU.
Это [очевидно] очень простая реализация по сравнению с кэшем первого уровня Hibernate. Обратная связь приветствуется.
greenDAO поддерживает сеансы, похожие на Hibernate, и поставляется с областью идентификации. Внутри сеанса сущности отслеживаются уровнем ORM.
Я пытаюсь сделать то же самое. Вы слышали о https://github.com/iainconnor/ObjectCache?
Я собираюсь сохранить длину списка и всех элементов один за другим.
Вернемся к вам, если бы я сделал с моей собственной реализацией
Cheers, Кароли