6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?