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를 확장하고 모두 잘 작동
유일한 방법 것은 그것이 내가 발견 작업을 한 것은으로 방법을 변경했다 다른 검색어. 내가 도대체 뭘 잘못하고있는 겁니까?
올바른 데이터를 수신하기 위해 로캘 이름을 보내는 것으로 볼 수 있습니다. 어쨌든 dao는 blazeds 인스턴스에서 호출되어 flex 응용 프로그램의 데이터를 가져옵니다. 그러나 문제는 로케일 또는 열 정보가 아닙니다. 동적 열 이름을 "?" 쿼리에서 (이 경우 뷰 계층에서 전송되지만 imo는 중요하지 않습니다.) – Francesco