Вызов одного ДАО от другого ДАО?

Это может когда-либо иметь смысл?

Скажите, что я должен выбрать объект от DB, который имеет отношение к другому объекту (представленный внешним ключом в DB, и составом в моем объекте области). Если в моем первом ДАО я выбираю данные для объекта 1, то назовите дао для объекта 2, и наконец (из первого ДАО, назовите метод set в объекте 1 и дайте ему ранее выбранный объект 2).

Я знаю, что мог сделать соединение вместо этого, но просто кажется более логичным мне отделить функциональность (который является, почему я скептически отношусь к вызову одного дао от другого). Или я должен переместить часть логики к уровню служб?

Спасибо

Обновление: Я думаю, что решил проблему со справкой из ответов: все, что я должен был сделать, было, добавляют следующие к моему отображению Объекта 1:

<one-to-one name="Object2" fetch="join"
        class="com...Object2"></one-to-one>

Я не должен был изменять ничто больше. Спасибо за справку!

5
задан oym 17 February 2010 в 23:12
поделиться

3 ответа

Читая это, я могу только заключить, что, скорее всего, вы делаете это неправильно ..;)

Если вы настроите свои сопоставления прямо между ObjectA и ObjectB (может быть OneToOne, OneToMany или ManyToMany), Hibernate будет ( lazy) автоматически загружает ссылку из A в B. Это избавит от необходимости запрашивать второй DAO и установит ссылку ObjectB в ObjectA.

Сделайте еще один шаг, и вам может даже не понадобиться DAO для ObjectB!

9
ответ дан 18 December 2019 в 10:44
поделиться

Лично я предпочитаю избегать ссылок между 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 в службу.

6
ответ дан 18 December 2019 в 10:44
поделиться
1
ответ дан 18 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: