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を選択することとし、以下のような実装を行った。
@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でカラムを指定するべきな気がするが...