SimpleJdbcTemplate 및 RowMapper 클래스를 사용하여 DAO 레이어와 함께 스프링 프레임 워크와 스프링 JDBC를 이미 사용하는 애플리케이션이 있습니다. 이것은 작은 클래스 구조가 데이터베이스에서 읽힐 때 아주 잘 작동하는 것처럼 보입니다. 그러나 다른 개체의 컬렉션을 보유하고있는 개체를로드해야합니다.이 개체는 다른 개체의 컬렉션을 계속 보유합니다.스프링 프레임 워크 JDBC DAO (agrgegation/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.getConnection()에 대한 프레임 워크에 의해 (A) 많은 호출이 구현 결과를 사용하여, 심지어는 세 가지 수준의 깊은 경우
및 (2) 더 나쁜, 우리는 연결의 수를 모자 때문에 다중 스레드가 데이터베이스에서 프로젝트를로드하려고 시도하는 동안 연결 풀에서 허용되는 경쟁 조건.
다른 본격적인 ORM 도구없이 Spring에서 더 좋은 방법으로 이러한 객체 계층 구조를로드 할 수 있습니까?
덕분에, 폴
본격적인 ORM 도구는 여기에서 필요한 도구입니다. 이러한 문제는 어렵습니다. 재발견하지 마십시오. – skaffman
코드 주위에 트랜잭션이 있습니까? 복잡한 객체를로드하는 데 동일한 중첩 된 DA 패턴을 사용하지만 Spring JDBC는 하나의 연결 만 사용합니다. – Serxipc