我在弄清楚如何使用JDBC处理应用程序上的实体之间的交互时遇到了问题。以前我使用过Hibernate,这不是一个真正的问题,因为几乎所有内容都是自动解决或通过注释解决的。现在,使用JDBC并不是那么神奇。
让我说我有这个课程:
class A{
private String name;
private List<B> bs;
private C c;
}
class AService{
private ADao aDao;
void save(A a){
aDao.persist(a);
}
}
class ADao{
void persist(A a){
//open connection and autocommit false
//persist C
//persist B's
//persist A
//commit
}
}
B和C有各自的DAO和服务 现在,据我所知,你不应该把DAO混在一起......这意味着我不应该在ADao中使用BDao和/或CDao,只是他们的服务。
如果这是真的,我怎么想达到预期的行为呢?我可以在交易方面坚持多个实体吗?服务不应该知道关于连接的任何信息......这些是我无法传播到业务层的详细实现。
到目前为止,我还没有在网上找到任何内容......所有的例子都只有一个实体,而我能想到的唯一其他解决方案就是在我的其他DAO上复制代码。
我真的很感激你能提供的任何帮助,以及阅读有关这方面的书籍或好材料。我发现了一些关于jdbc的书......但坦率地说它们并不是那么好......其中一些甚至将DAO传播到表示层......:/
答案 0 :(得分:0)
没有这样的做法,DAO无法处理多个实体。如果DAO应该处理一个和一个实体,那么它应该只接受一个实体,而不是像示例中那样嵌套的实体树。
所以你有两个选择。
在DAO层解耦A,B,C。每个人都有一个DAO。您已经看到了持久化bean的示例。服务层通过根据需要调用每个DAO来负责编排所有bean的持久性。它还负责维护关系。服务层还包装事务中的所有调用。
如果实体A,B和C密切相关,请拥有您现在拥有的实体。有一个DAO一起照顾A,B和C.在选项1中的服务层中所做的事情可以推送到DAO层。
除非你的项目包含很少的实体,或者你只是在玩jdbc,否则我建议使用像JPA / Hibernate这样的东西。我知道JPA是一种痛苦,但普通的jdbc将是一场噩梦。
答案 1 :(得分:-1)
您是否愿意使用EJB?他们有点处理业务层逻辑(如DB START .. ejb函数.. DB COMMIT)。我知道他们已经过时了,但我个人认为他们有一席之地。
交易是业务层问题,而不是DAO /数据层问题。