我有一个应用程序已经使用Spring Framework和Spring JDBC以及使用SimpleJdbcTemplate和RowMapper类的DAO层。对于从数据库中读取的小型结构,这看起来工作得很好。但是,我们需要加载持有其他对象集合的对象,这些对象仍然保存着其他对象集合。Spring Framework JDBC DAO with agrrgation/composition
这个问题的“明显”解决方案是创建一个命名的RowMapper类或我们的对象,并将引用传递给构造函数中正确的DAO对象。例如:
public class ProjectRowMapper implements ParameterizedRowMapper {
public ProjectRowMapper(AccountDAO accountDAO,) {
this.accountDAO = accountDAO;
}
public Project mapRow(ResultSet rs, int rowNum) throws SQLException {
Project project= new Project();
project.setProjecttId(rs.getString("project_id"));
project.setStartDate(rs.getDate("start_date"));
// project.setEtcetera(...);
// this is where the problems start
project.setAccounts(accountDAO.getAccountsOnProject(project.getProjectId()));
}
}
的问题是,即使ProjectDAO和帐户DAO共享相同的DataSource实例(在我们的例子,这是一个连接池),任何数据库访问都是通过不同的连接来完成。
如果对象层次甚至是三个层次深,由框架的DataSource.getConnection()使用 (一)多次调用该实施效果,并 (2)更糟糕,因为我们盖的连接数允许在我们的连接池中,潜在的竞争条件,而多线程正试图从数据库中加载项目。
是否有更好的方法在Spring中(没有另一个成熟的ORM工具)来实现加载这样的对象层次结构?
感谢, 保罗
完整的ORM工具正是您在这里所需要的。这些问题很难,不要重塑它们。 – skaffman 2010-06-21 13:41:50
你的代码是否有任何交易?我们使用相同的嵌套dao模式来加载复杂的对象,但Spring JDBC只使用一个连接 – Serxipc 2010-11-19 09:21:43