2012-05-02 6 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> 

そして、私はそれにプロパティタブラを追加し、うまく働いている知っています。

関連する問題