Это может когда-либо иметь смысл?
Скажите, что я должен выбрать объект от DB, который имеет отношение к другому объекту (представленный внешним ключом в DB, и составом в моем объекте области). Если в моем первом ДАО я выбираю данные для объекта 1, то назовите дао для объекта 2, и наконец (из первого ДАО, назовите метод set в объекте 1 и дайте ему ранее выбранный объект 2).
Я знаю, что мог сделать соединение вместо этого, но просто кажется более логичным мне отделить функциональность (который является, почему я скептически отношусь к вызову одного дао от другого). Или я должен переместить часть логики к уровню служб?
Спасибо
Обновление: Я думаю, что решил проблему со справкой из ответов: все, что я должен был сделать, было, добавляют следующие к моему отображению Объекта 1:
<one-to-one name="Object2" fetch="join"
class="com...Object2"></one-to-one>
Я не должен был изменять ничто больше. Спасибо за справку!
Читая это, я могу только заключить, что, скорее всего, вы делаете это неправильно ..;)
Если вы настроите свои сопоставления прямо между ObjectA и ObjectB (может быть OneToOne, OneToMany или ManyToMany), Hibernate будет ( lazy) автоматически загружает ссылку из A в B. Это избавит от необходимости запрашивать второй DAO и установит ссылку ObjectB в ObjectA.
Сделайте еще один шаг, и вам может даже не понадобиться DAO для ObjectB!
Лично я предпочитаю избегать ссылок между DAO. Если мне нужны данные, полученные DAO, для выполнения другой операции, я разделяю DAO:
// Bad - have to inject Dao into antoher Dao
class FooDao extends BaseDao {
BarDao barDao;
public Foo complexLoad() {
return doFooStuff(barDao.loadBar());
}
}
// Good - dependency on Bar only, not to Dao
class FooDao extends BaseDao {
public Foo complexLoad(Bar bar) {
return doFooStuff(bar);
}
}
Затем я вставляю оба DAO в службу.
http://www.theserverside.com/discussions/thread.tss?thread_id=32661
Это поможет вам...