2010-01-09 3 views
6

Я работаю над API для доступа к данным, хранящимся в системе. Система содержит такие вещи, как люди, встречи и процедуры, связанные с этими встречами. Мое приложение строго будет доступно только для чтения.POJO с другими ссылками POJO

Я использую Spring w/RowMapper для создания таких объектов, как «Person», «Appointment» и «Procedure». У меня есть DAO для каждого элемента. (то есть: PersonDAO.getById(), PersonDAO.getByName(), ..).

Проблема заключается в том, что Appointment имеет ссылку на объект Person. Было бы хорошо, если бы объект Person имел ссылку на назначение Person, но если я начну их загружать, он станет круговой ссылкой.

Итак, я думаю, мой вопрос - это правильный способ справиться с этим, просто поместите ссылки (идентификаторы) в POJO, а затем на бизнес-уровне (?) Просто сделайте правильные звонки, чтобы получить информацию? Или это нормально каким-то образом передать ссылку на DAO в фактическом POJO, чтобы я мог лениво загружать объекты объекта при ссылке? Но тогда как вы справляетесь с круговой ссылкой? Когда у меня есть Person, и я лениво загружаю все их встречи, у этих встреч также будет связанный с ними Человек. Когда я загружаю этот Person, он может потенциально иметь информацию о различиях от Person Я загружаю Назначения для.

Person (объект x) ленивая нагрузка -> Назначения могут лениво загрузить Person (объект x ').

С Person, возможно, изменилось к тому времени, когда я пошел лениво загружать их встречи. Мне действительно нужен объект Person в Appointment, чтобы обратиться к тому же объекту Person.

Я получаю все от этого. Я знаю, что могу просто «заставить его работать», но я хочу попытаться найти хорошее решение. Я думал об использовании спячки для этого, но думал, что это действительно просто избыток. Возможно, это не так.

ответ

2

Вы описываете двунаправленную связь, в которой Hibernate имеет конкретную (и вообще очень хорошую) поддержку.

Читайте в how to do it в документах.

Прокрутка этого вручную будет довольно неудобной и подверженной ошибкам. Я бы не рекомендовал его. Используйте силу инструментов ORM, таких как Hibernate, вот для чего они предназначены.

+1

Как и слово "неудобный". – BalusC

+0

Вы можете использовать его в любое удобное для вас время :) – skaffman

+0

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

0

Расширение предложения использования Hibernate, я бы рекомендовал проверить поддержку аннотаций JPA, поддерживаемую Hibernate (я считаю, что это часть спецификации J2EE). Вы можете аннотировать свои классы аннотацией @ManyToMany. Проверьте эти документы:

https://www.hibernate.org/397.html

+0

'@ ManyToMany' на самом деле не имеет ничего общего с двунаправленными ассоциациями. Это ортогональная концепция. – skaffman

+1

Вы правы. Я поставил его для ясности в его конкретном случае. Я думал, что в модели Человека и Назначения многие Люди могут принадлежать Назначению, у Человека может быть много Назначений. В этом случае вы будете использовать @ManyToMany на половину двунаправленного отношения, а @MappedBy - на другом. Надеюсь, это прояснит ситуацию. –

+0

Собственно, в моем конкретном случае. У встречи есть только один человек, связанный с ней, но у человека может быть несколько назначений. –

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