2012-05-02 3 views
0

의 PostgreSQL과의 MyBatis에서 선택 실행 때이 오류가 설정하는 동안 : 나는 mapper.xml에서, 여기에 오류가오류 매개 변수

### The error may exist in data/mapper.xml 
### The error may involve Transaccion.selectDeFraude-Inline 
### The error occurred while setting parameters 
### SQL: SELECT transaction_id, card_number, transaction_date, fraud FROM transactions.? ORDER BY card_number, transaction_date ASC; 
### Cause: org.postgresql.util.PSQLException: ERROR: error de sintaxis en o cerca de «$1» 

:

<select id="selectDeFraude" parameterType="String" resultMap="result"> 
    SELECT transaction_id, card_number, transaction_date, fraud FROM transactions.#{tabla} ORDER BY card_number, transaction_date ASC; 
</select> 

이가이다 메서드를 호출하는 선택 :

public List<Transaccion> selectDeFraude(String tabla){ 

    SqlSession session = sqlSessionFactory.openSession(); 

    try { 
     List<Transaccion> list = session.selectList("Transaccion.selectDeFraude", tabla); 
     return list; 
    } finally { 
     session.close(); 
    } 
} 

# {tabla} 테이블 이름으로 바꿀 경우 잘 작동합니다. mapper 메서드는 작동하지 않지만 # {something}을 적절한 값으로 바꾸면 모든 메서드가 작동합니다.

+1

SQL 문의 끝에 세미콜론이 있습니다. 이 오류는이 세미콜론으로 인해 발생할 수 있습니다. 제거한 후 다시 시도하십시오. – wasabi

답변

1

질문에 대한 답변이 정확하지 않지만 지금은 제대로 작동하고 있습니다. myBatis로 테이블 이름을 매핑 할 때 #{table_name} 대신 ${table_name}을 사용해야하며 인수로 전달한 객체의 속성이어야합니다.

나는 다음과 같이 사용하려면 코드 변경 :

<select id="selectDeFraude" parameterType="Transaccion" resultMap="result"> 
    SELECT transaction_id, card_number, transaction_date, fraud FROM transactions.${tabla} ORDER BY card_number, transaction_date ASC; 
</select> 

을 그리고 난 그것에 속성 타블라를 추가하고 잘 작동 알고있다.

관련 문제