2017-12-21 14 views
0

내 보조 DB에서 내 기본 DB에서 이름을 가져 오는 테이블에 액세스하려고합니다. 내 어려움은 내 보조 쿼리에 매개 변수로 "DB-Name"을 전달하는 것입니다 (BTW는 MyBatis 주석 기반 Mappers를 사용하고 있습니다).mybatis - @One annotation에 여러 매개 변수 전달

이 내 매퍼

@SelectProvider(type = DealerQueryBuilder.class, method = "retrieveDealerListQuery") 
@Results({ 
    @Result(property="dealerID",    column="frm_dealer_master_id"), 
    @Result(property="dealerTypeID",   column="frm_dealer_type_id",  [email protected](select="retrieveDealerTypeDAO")), 
    @Result(property="dealerName",    column="frm_dealer_name") 
}) 
public List<Dealer> retrieveDealerListDAO(@Param("firmDBName") String firmDBName); 

@Select("SELECT * from ${firmDBName}.frm_dealer_type where frm_dealer_type_id=#{frm_dealer_type_id}") 
@Results({ 
    @Result(property="dealerTypeID",   column="frm_dealer_type_id"), 
    @Result(property="dealerType",    column="frm_dealer_type") 
}) 
public DealerType retrieveDealerTypeDAO(@Param("firmDBName") String firmDBName, @Param("frm_dealer_type_id") int frm_dealer_type_id); 

내 "기본 DB"에서 얻어진하신 firmDBName입니다.

  • 두 번째 쿼리에서 $ {firmDBName}을 생략하면 쿼리가 내 기본 데이터베이스에 액세스하려고 시도하고 "PrimaryDB.frm_dealer_type"테이블을 찾을 수 없습니다. 그래서 기본적으로 내 기본 DB에서 "frm_dealer_type"이라는 테이블을 검색하려고합니다.
  • 내가

    @Result (특성 = "dealerTypeID"같은 @Result를 다시 작성하려고하면, 열 = "firmDBName = firmDBName, frm_dealer_type_id = frm_dealer_type_id"하나 = 하나 (선택 = "retrieveDealerTypeDAO"@)),

"firmDBName"열이 존재하지 않는다는 오류가 발생합니다.

  • $ {firmDBName}을 # {firmDBName} (으)로 변경해도 도움이되지 않았습니다.

나는이 블로그를 참조 않았다 - here

내가 원하는 솔루션을 보조 쿼리로 내 기본 쿼리에서 내 매개 변수 firmDBName을 전달합니다.

답변

1

여기서 제한 사항은 열이 첫 번째 @SELECT에 의해 반환되어야한다는 것입니다. 테스트 케이스 here을 보면 첫 번째 선택에서 parent_xxx 값을 반환합니다. DealerQueryBuilder는 firmDBName을 반환 값으로 선택해야하며 열은 반환 열의 이름을 해당 열로 매핑해야합니다.

귀하의 열 정의는 항상 잘못이다, 그것은해야한다 : {frm_dealer_type_id=frm_dealer_type_id,firmDBName=firmDBName} 또는 무엇이든은 첫 번째 선택에서 반환되었다.

다시 당신은 내가 이상이 테스트 케이스뿐만 아니라 여기에 문서 http://www.mybatis.org/mybatis-3/sqlmap-xml.html#Nested_Select_for_Association

+0

에 지정된 열 이름이 {PARAMETER_NAME = COLUMN_NAME}는 DB 테이블에 존재하지 않는, 어떻게 통과 할 경우 참조 할 수 있습니다 매개 변수 _ 이름의 값은 변수 형식이므로 {parameter_Name = _my_variable_}입니까? – Razvi

+0

dB 테이블에 있어야 할 필요는 없으며 sqlprovider에 의해 생성 된 select에서 반환되어야합니다. 만약 당신이 자바 코드를 제공 할 수 있다면, 나는 그것을 고치는 방법을 보여 줄 수있다. 테스트 케이스를 볼 수 없으면 내 대답에 링크되어 있으며 첫 번째 선택에서 어떻게 반환되는지 확인할 수 있습니다. – h3adache

+0

DB 이름을 반환 값으로 선택하고 사용자 지정 열 이름을 반환 열의 이름을 매핑합니다. 문제가 해결되었습니다. 감사 – Razvi