Какой Android/Java ORM использует "кеширование объектов", как Hibernate?

Я видел кучу вопросов о легких альтернативах Hibernate, особенно для Android. Но какой из них имеет шаблон "Карта идентичности"?

Этот шаблон гарантирует, что любой объект, представляющий строку в БД, существует только один раз в любом сеансе. - Это помогает моей программе быть последовательной: если я где-то изменяю сопоставленный объект, он изменяется везде (потому что все ссылки указывают на один и тот же объект). Не имеет значения, буду ли я повторно извлекать объект с помощью нового запроса к базе данных или по-прежнему останусь с ним из предыдущих вызовов: ORM гарантирует, что все они ведут себя как одно и то же.

Hibernate делает это в "кэше 1-го уровня".

3 ответа

Решение

ORMLite - это пакет Android ORM для Android, который начиная с версии 4.26 (выпущен 26.09.2011) содержит первое представление о внутреннем кеше объектов. ORMLite не имеет шаблона "сеанса", но пользователь может внедрить кэш в любой DAO и может сбросить его, когда пожелает. Вот документы для поддержки кеша.

http://ormlite.com/docs/object-cache

Цитируя это руководство, кеш поддерживает следующие вещи:

  • Если вы создаете объект с использованием DAO, он будет добавлен в кеш.
  • Когда вы запрашиваете объект, используя DAO, если объект находится в кэше, он будет возвращен. Если его нет в кеше, он будет добавлен в кеш. Это не относится к необработанным методам запросов.
  • Если вы обновите объект с помощью базы данных, используя DAO, если он существует в кеше, он будет обновлен.
  • Если вы обновляете объект из базы данных, используя DAO, если он существует в кэше, он будет обновлен.
  • Если вы удалите объект с помощью DAO, объект будет удален из кэша.

В базовый пакет ORMLite включены 2 реализации кеша объектов. Один, который поддерживает слабые / мягкие ссылки, и другой, который является стандартным LRU.

Это [очевидно] очень простая реализация по сравнению с кэшем первого уровня Hibernate. Обратная связь приветствуется.

greenDAO поддерживает сеансы, похожие на Hibernate, и поставляется с областью идентификации. Внутри сеанса сущности отслеживаются уровнем ORM.

Я пытаюсь сделать то же самое. Вы слышали о https://github.com/iainconnor/ObjectCache?

Я собираюсь сохранить длину списка и всех элементов один за другим.

Вернемся к вам, если бы я сделал с моей собственной реализацией

Cheers, Кароли

Другие вопросы по тегам