最近ずっとStrutsでiBatisを使ったプログラムの改修をしていて、このエラーに遭遇したのですが、地味にググってもちょっと解決に詰まったのでメモ書き。
エラーメッセージは以下のような形式で出ていました。
com.ibatis.common.beans.ProbeException: There is no WRITEABLE property named 'xxx列名' in class 'パッケージ名.クラス名'
で、原因はというとほぼこのブログで書かれていた内容ではあったのですが地味に違っていて、なんとカラム名にアンダースコアが入っているときはgetterとsetterにも同様にアンスコを入れないと認識されない、でした。
例えば今回の場合、取得したいDBテーブルのカラム名がprev_ansids
で取得用のDtoでは以下のような変数名にセットするようにしていた場合、以下のようなsetterとgetter名にするとこのエラーが出ます:
AnswerDto.java
private String prev_ansIds;
public String getPrevAnsIds() {
return prev_ansIds;
}
public void setPrevAnsIds(String prev_ansIds) {
this.prev_ansIds = prev_ansIds;
}
これをちゃんと以下のようなコードに直したらエラーは出なくなりました。
AnswerDto.java
private String prev_ansIds;
public String getPrev_ansIds() {
return prev_ansIds;
}
public void setPrev_ansIds(String prev_ansIds) {
this.prev_ansIds = prev_ansIds;
}