这可能有意义吗?
假设我需要从DB获取一个对象,该对象与另一个对象有关(由DB中的外键表示,并由我的域对象中的组合表示)。如果在我的第一个DAO中我获取对象1的数据,则调用对象2的dao,最后(在第一个DAO中,调用对象1中的setter并为其提供先前获取的对象2)。
我知道我可以做一个连接,但我觉得解耦功能似乎更合乎逻辑(这就是为什么我对从另一个人调用一个dao持怀疑态度)。或者我应该将一些逻辑移到服务层吗?
由于
更新:我想我在答案的帮助下解决了这个问题:我需要做的就是将以下内容添加到对象1的映射中:
<one-to-one name="Object2" fetch="join"
class="com...Object2"></one-to-one>
我没有必要改变其他任何东西。谢谢你的帮助!
答案 0 :(得分:9)
在阅读本文时,我只能得出结论,最有可能的是,你做错了......;)
如果在ObjectA和ObjectB之间设置映射(可能是OneToOne,OneToMany或ManyToMany),Hibernate将(懒惰)自动将引用从A加载到B. 这将消除查询第二个DAO的需要,并在ObjectA中设置ObjectB引用。
更进一步,你可能甚至不需要为ObjectB提供DAO!
答案 1 :(得分:6)
我个人更喜欢避免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注入服务。
答案 2 :(得分:1)