2017-11-11 1 views
0

현재 내 (소규모) 프로젝트에서 계층화 된 아키텍처를 사용 중이고 삽입/업데이트/삭제 방법에 대한 리플렉션을 사용하여 BaseRepository (클래스 별 리포지토리에서 상속 한 클래스)를 확장하는 방법을 고려했습니다.계층화 된 아키텍처 - 저장소 및 반영

BaseRepository.java은 다음과 같습니다 내 :

public abstract class BaseRepository<CLASS extends BaseDomain<CLASS>>{ 

} 

BaseDomain 단지 인 경우 :

public class BaseDomain<CLASS extends BaseDomain<CLASS>> { 
    private Long id; 

    //getters setts etc. 
} 

이제 내 문제는 BaseRepository에서 deleteById 방법에 있습니다

public int deleteById(Connection connection, Long id) throws SQLException { 
    PreparedStatement delete= connection.prepareStatement("DELETE FROM ? WHERE id = ?"); 
    delete.setObject(1, entity) //heres the problem, where do I get entity from? 
    delete.setObject(2, id); 

    return 0; 
} 

내 특정 저장소는 Base를 다음과 같이 확장합니다.

public class UserRepository extends BaseRepository<User>{ 

} 

은 어떻게 BaseRepositoryUser 클래스 그래서 난 등의 방법을 업데이트/삭제에서 사용할 수 있습니다 어떻게해야합니까?

도움 주셔서 감사합니다.

+0

에 구성을 제공하는 객체를 가질 수있다. – kevinjom

답변

1

엔티티를 BaseRepository 생성자의 매개 변수로 만드는 방법은 어떻습니까?

는 편집 : 그러나 나는 시도하지 않은 생각할 수

public class UserRepository extends BaseRepository<User>{ 

    public static final String ENTITY = "users";   

    public UserRepository(){ 
     super(ENTITY); 
    }  

} 
+0

새로운 저장소 인스턴스를 생성해야 할 때마다 의미가 있습니까? 쿼리 할 때 엔티티 인스턴스가 필요합니까? – kevinjom

1

하는 간단한 방법은 BaseRepository에 엔티티 클래스 형식을 전달하는 것입니다.

private final Class<CLASS> entityType; 
public BaseRepository(Class<CLASS> entityType) { 
    this.entityType = entityType; 
// do your stuff 
} 

엔티티 클래스 유형에 따라 작동하기에 적합한 테이블을 찾으려면. 대부분의 Ruby ORM과 마찬가지로 컨벤션을 통해 엔티티 유형이 User 인 경우 users 또는 user 또는 컨벤션이 무엇이든간에 작업 할 수 있습니다.

아니면 당신이 메소드 인수 목록에서 연결 개체를 필요가 있다고 생각하지 않습니다 BaseRepository