从另一个DAO调用一个DAO?

这有意义吗?

假设我需要从DB获取一个与另一个对象有关的对象(由DB中的外键和我的域对象中的组合表示)。 如果在我的第一个DAO中我获取对象1的数据,则调用对象2的dao,最后(从第一个DAO中,调用对象1中的setter并为其提供先前获取的对象2)。

我知道我可以做一个连接,但我觉得解耦function似乎更合乎逻辑(这就是为什么我对从另一个人调用一个dao持怀疑态度)。 或者我应该将一些逻辑移到服务层?

谢谢

更新 :我想我在答案的帮助下解决了问题:我需要做的就是在对象1的映射中添加以下内容:

 

我没有必要改变其他任何东西。 谢谢您的帮助!

在阅读本文时,我只能得出结论,最有可能的是,你做错了..;)

如果在ObjectA和ObjectB之间设置映射(可能是OneToOne,OneToMany或ManyToMany),Hibernate将(懒惰)自动将引用从A加载到B. 这将消除查询第二个DAO的需要,并在ObjectA中设置ObjectB引用。

更进一步,你可能甚至不需要ObjectB的DAO!

我个人更喜欢避免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注入服务。