takeda_san’s blog

KotlinとVRを頑張っていく方向。

Doma2+SpringBoot+Gradle+Kotlinをやっていくときのアレコレ

似たようなタイトルの記事がありますが、お察しの通り続きです。

takeda-san.hatenablog.com

きっかけ

Doma2をKotlinで使うときにベストプラクティスとしては、エンティティをData Classで書くのが良いらしい。

Kotlin サポート — Doma 2.0 ドキュメント

というわけで、前回のJavaのエンティティをKotlinに差し替えたい。
コード量も減るし、何よりJavaのエンティティからKotlinのエンティティに変換するみたなことがなくて良い。
(ドメインロジックをKotlinのエンティティに持たせたいときとか、そうなるよね)

しかしながら、ビルドするとこんなエラーが出る。

C:\Users\taked\workspace\doma2samplekotlin\build\classes\java\main\jp\takeda\doma2sample\dao\PersonDomaDaoImpl.java:28: エラー: シンボルを見つけられません
            __query.setEntityType(jp.takeda.doma2sample.model._PersonEntity.getSingletonInternal());
                                                             ^
  シンボル:   クラス _PersonEntity
  場所: パッケージ jp.takeda.doma2sample.model
C:\Users\taked\workspace\doma2samplekotlin\build\classes\java\main\jp\takeda\doma2sample\dao\PersonDomaDaoImpl.java:39: エラー: シンボルを見つけられません
            org.seasar.doma.jdbc.command.SelectCommand<java.util.List<jp.takeda.doma2sample.model.PersonEntity>> __command = getCommandImplementors().createSelectCommand(__method0, __query, new org.seasar.doma.internal.jdbc.command.EntityResultListHandler<jp.takeda.doma2sample.model.PersonEntity>(jp.takeda.doma2sample.model._PersonEntity.getSingletonInternal()));
                                                                                                                                                                                                                                                                                                                                     ^
  シンボル:   クラス _PersonEntity
  場所: パッケージ jp.takeda.doma2sample.model
エラー2個

f:id:takeda_san:20181203234522p:plain

解決方法

プロジェクト丸ごとはここを参照。

github.com

これも、公式を見れば一発なんだけどkaptを使って、注釈処理をしてあげるとビルドが通ります。

Kotlin サポート — Doma 2.0 ドキュメント

ですが、上記ページでは当たり前すぎて書いてないと思うのですが、dependenciesにこれを追加するのをお忘れなく。

kapt("org.seasar.doma:doma:${domaVersion}")

https://github.com/takedasan/doma2samplekotlin/blob/master/build.gradle

gradle build すると無事、ビルドが通ります。
アプリケーションの起動は bootRun で行います。

IntelliJのビルドだと相変わらずコケます。
毎回Gradleでやるのめんどいから何とかならんのかなぁ…