wrongwrongな開発日記

しんまいさんの忘備録

【SpringBoot】Lombokでアクセサを実装したis...という名前のBooleanを含むEntityのマッパーを用いたINSERT/SELECTが失敗する問題への対処【JDBC】

概要はSSIAです。
ここではEntityをデータベースのテーブルそのままのPOJOとします。

原因

ここではis_active_sampleという名前のカラムに対して、isActiveSampleというBoolean/booleanのフィールドを持つEntityを挿入する状況をサンプルとして書きます。

LombokでこのEntityのアクセサを生成すると、下記のサンプルのように、アクセサの名前はisが省略されたgetActiveSample/setActiveSampleとなる場合があります。

import lombok.Setter;

@Setter
public class Sample {
    private boolean isActiveSample;
}

f:id:wrongwrongwrongwrong163377:20190109110448p:plain
一方これはデータベースのカラム名と異なっているため、BeanPropertySqlParameterSourceBeanPropertyRowMapperといったマッパーはアクセサとカラム名を紐付けられず、INSERT/SELECTは失敗します。

対処

getIs.../setIs...という名前のアクセサを自分で実装することで、問題が解決します。
この時、自力でアクセサを実装したフィールドに対してLombokの自動生成は行われなくなります。