Объектная персистентность

Требования

Реализовать библиотеку поддержки непрерывности существования (persistence) иерархии объектов с поддержкой объектной выборки в предметно-ориентированных терминах (DSL). Рекомендуется использовать языки Clojure/Ruby/Java. Способ хранения объектов может быть выбран на усмотрение разработчика, однако он не должен влиять на API или объекты пользователя. Требования:
  1. поддрежка отношений между объектами:
  2. библиотека должна предоставлять API с базовыми операциями "сохранить", "загрузить", "удалить";
  3. библиотека должна предоставлять API для выполнения объектных запросов (query DSL) и (в зависимости от языка) механизмы генерации кода по объектной модели пользователя для построения внутреннего DSL (достаточно будет поиска объектов по совпадению атрибутов с поддержкой выражений NOT, AND, OR).

Дополнительные требования

Рекомендации

Ознакомьтесь с аналогичным механизмом в языке C# (язык запросов и т.д.)