LoginSignup
6
2

More than 5 years have passed since last update.

Spring Boot + Doma2 で UnknownColumnHandler を設定する

Posted at

Spring Boot + Doma2 な環境でwebアプリを作り始めた。
そんな中、sqlファイルで

SELECT * FROM ...

のような記述をしたら、以下のようなエラーが発生した。

org.seasar.doma.jdbc.UnknownColumnException: [DOMA2002] カラム[pub_date]が結果セットに含まれますが、このカラムにマッピングされたプロパティがエンティティクラス[xxx.yyy.Zzz]に見つかりません。次の3つの内のいずれかの対応が必要です。1)エンティティクラスに[pubDate]という名前のプロパティを定義する。2)任意の名前のプロパティに@Columnを注釈し@Columnのname要素に[aaa]を指定する。3)UnknownColumnHandlerに未知のカラムを無視するような実装をしorg.seasar.doma.jdbc.Configに設定する。
SQLファイルパス=[META-INF/xxx/yyy/zzz/select.sql]。

エラーメッセージに解決策が書かれていて素晴らしい!
この中で、今後実装を進めるなかで手間が減りそうな3を選択することとし、以下のような実装を行った。

App.jaga
@EnableAutoConfiguration
@ComponentScan
public class App {

    @Autowired
    DataSource dataSource;

    @Autowired
    Dialect dialect;

    @Autowired
    Naming naming;

    public static void main(String[] args) throws Exception {
        SpringApplication.run(App.class, args);
    }

    @Bean
    Config domaConfig() {
        return new Config() {
            @Override
            public DataSource getDataSource() {
                return dataSource;
            }

            @Override
            public Dialect getDialect() {
                return dialect;
            }

            @Override
            public UnknownColumnHandler getUnknownColumnHandler() {
                return new UnknownColumnHandler() {
                    @Override
                    public void handle(Query query, EntityType<?> entityType, String unknownColumnName) {
                    }
                };
            }

            @Override
            public Naming getNaming() {
                return naming;
            }
        };
    }

}

ググっても実装方法が見つけられるかなり時間をムダにしてしまった...
そもそもsqlでカラムを指定するべきな気がするが...

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2