2012-04-25 2 views
1

Я еще не использовал Морфию, но я рассматриваю ее для текущего проекта.Графики морфий и объектов

Предположим, у меня есть POJO с рядом аннотаций @Reference, и я прошу Morphia получить граф объектов из базы данных. Если я затем сделаю другой вызов DAO или DataStore и попрошу Morphia получить некоторый объект, который уже был создан на первом графике, вернет ли Morphia ссылку на уже созданный объект или создаст новый экземпляр?

Если Morphia каждый раз возвращает новый экземпляр объекта, есть ли у кого-нибудь рекомендации по наилучшему подходу к созданию репозитория с поддержкой Morphia, который не будет дублировать уже созданные объекты?

ответ

3

Как я вижу в Morphia, он будет читать каждую ссылку. Это одна из проблем, почему я создал Morphium. Я включил там слой кеширования, поэтому, если вы прочтете ссылку, этот текст не будет снова прочитан (по крайней мере, если вы ищете по ID ...)

1

Мы используем морфию в производстве, и есть два способа убедитесь, что вы не загружаете ссылки, которые мы тоже встретили.

Один из них - использовать параметр ленивой загрузки, когда вы определяете элемент @Reference в своем основном классе. Это, конечно, означает, что это поведение является «глобальным» для этого объекта.

Лучший способ сделать это - не определять @Reference с помощью Morphia и вместо этого управлять ссылками самостоятельно. Дайте мне знать, если вам нужен образец кода.

+0

Вы можете поделиться образцами кода? – mtariq

1

Я перестал использовать @Reference тоже, и вместо того, чтобы объявить что-то вроде:

ObjectId itemId 

вместо того элемента поля. У этого есть 2 преимущества: (1) он позволяет мне определить getter через helper метод getObject (...), который я написал с кэшированием объектов, и (2) он хранит простой ObjectId в объекте Mongo, а не полный DBRef, который включает имя коллекции и, следовательно, примерно вдвое больше размера данных.

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