2010-05-31 6 views
1

Spring JdbcTemplate로 대체되는 매개 변수에 문제가 있습니다.Spring JDBCTemplate을 사용하는 쿼리에서 동적으로 필드 이름을 선택하십시오.

<bean id="fixQuery" class="java.lang.String"> 
    <constructor-arg type="java.lang.String" 
     value="select fa.id, fi.? from fix_ambulation fa 
       left join fix_i18n fi 
       on fa.translation_id = fi.id order by name" /> 

그리고이 방법 :

public List<FixAmbulation> readFixAmbulation(String locale) throws Exception { 
    List<FixAmbulation> ambulations = this.getJdbcTemplate().query(
      fixQuery, new Object[] {locale.toLowerCase()}, 
      ParameterizedBeanPropertyRowMapper 
        .newInstance(FixAmbulation.class)); 
    return ambulations; 
} 

그리고 내가 좋아하는 것이를 가지고

나는이 쿼리가? 사용자가 사용하고있는 로케일을 나타내는 문자열로 채워집니다. 그래서 사용자가 브라질리아 인 경우 fix_i18n 테이블의 열 pt_br을 보내고, 그렇지 않으면 그가 미국인이라면 열 en_us를 보낼 것입니다. 내가 Fi를 교체하는 경우

내가이 방법에서 얻을 것은 PostgreSQL의 예외 org.postgresql.util.PSQLException: ERROR: syntax error at or near "$1"

입니다.? 단지 ? (로캘의 열 이름은 고유하므로 데이터베이스에서이 쿼리를 실행하면 잘 작동합니다.) 메서드에서 반환 된 모든 개체에 문자열 이름의 로캘 필드가 있습니다. 나는. 이름 필드에는 "en_us"가 있습니다.

public List<FixAmbulation> readFixAmbulation(String locale) throws Exception { 
    String query = "select fa.id, fi." + locale.toLowerCase() + " as name " + fixQuery; 
    this.log.info("QUERY : " + query); 
    List<FixAmbulation> ambulations = this.getJdbcTemplate().query(
      query, 
      ParameterizedBeanPropertyRowMapper 
        .newInstance(FixAmbulation.class)); 
    return ambulations; 
} 

과에 fixQuery 설정 :

<bean id="fixQuery" class="java.lang.String"> 
    <constructor-arg type="java.lang.String" 
     value=" from telemedicina.fix_ambulation fa 
       left join telemedicina.fix_i18n fi 
       on fa.translation_id = fi.id order by name" /> 
</bean> 

내 DAO 봄 JdbcDaoSupport를 확장하고 모두 잘 작동

유일한 방법 것은 그것이 내가 발견 작업을 한 것은으로 방법을 변경했다 다른 검색어. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

아무도 열 정보를 보내지 않아야한다고 생각하지 않습니다. 그것은 지속성 계층의 물건이므로 누출 될 필요가 없습니다.

로캘 별보기를 원하면 Spring 기능을 사용하십시오. 데이터를 유지하는 방법과는 아무런 관련이 없습니다.

+0

올바른 데이터를 수신하기 위해 로캘 이름을 보내는 것으로 볼 수 있습니다. 어쨌든 dao는 blazeds 인스턴스에서 호출되어 flex 응용 프로그램의 데이터를 가져옵니다. 그러나 문제는 로케일 또는 열 정보가 아닙니다. 동적 열 이름을 "?" 쿼리에서 (이 경우 뷰 계층에서 전송되지만 imo는 중요하지 않습니다.) – Francesco

관련 문제