2012-02-24 3 views
0

я не нашел где-нибудь, возможно ли запрашивать от db4o всех объектов реализации некоторого общего интерфейсаdb4o - как запросить общий интерфейс

, например: запросить все объекты, реализующие IList<T>, я попробовал:

var items = from IList<object> item in session 
      select item; 

, но это не возвращает все списки в базе данных (только те, которые реализуют specificaly IList<object>)

есть ли способ сделать это другое, то запрос всех объектов из базы данных, петли-я em и оценить объект вручную? (Я должен был бы пройти через Milions объектов в данном случае)

Спасибо

ответ

1

Вы хотите запросить все объекты, которые любой экземпляр> типа IList <. Или другие общие костюмы.

По-моему, это невозможно в данный момент. Причина в том, что db4o рассматривает каждый экземпляр списка <> как своего собственного типа. Таким образом, список и список хранятся в двух разных типах. Это относится к хранилищу метаданных в db4o, где они хранятся отдельно. Это также означает, что для общего экземпляра разных типов List <> не используется общий индекс.

Btw в Java это наоборот, все типы списка <> рассматриваются как один и тот же тип, поскольку в Java дженерики не отражаются во время выполнения.

Таким образом, вам необходимо пройти все типы списков <> самостоятельно, чтобы получить все экземпляры.

Для ваших собственных типов я бы создал абстрактный не общий класс, который наследует общий экземпляр. Затем вы можете запросить для этого и получить все общие подтипы. Обратите внимание, что это не работает для интерфейсов, поскольку db4o не индексирует и не сохраняет метаинформацию для интерфейсов.

+0

Я вижу. Грустно немного, это была бы такая замечательная особенность. Спасибо за ответ в любом случае –

Смежные вопросы