[micronaut/Grails] 複数のindexがある時に、SQL strings added more than once for… のようなエラー

Micronaut / Grails で起動時に以下のようなエラー。

現象

mapping で、複数のindexを複数指定している場合に発生している模様。

修正方法

のように、indexの指定の,区切りに空白を入れない。

原因

テーブル名の接頭語が被っていると同様の現象が発生しているような記述を見かけた。
確かに今回のプロジェクトだと、テーブル名の接頭語が被っているがそこは変更できない。
他のテーブルだとカンマの後に空白があって問題がないので、テーブル名の接頭語が被ってることで何らかの影響で上記現象が発生していると思われるが、根本原因はわからず、探る時間もなし!

[Grails] マルチテナント環境での試験

Grails 3.3.11 でやってます。

シングルDBのマルチテナント
ここが参考になるで、参考しながら作成していたのですが、Unit試験が通らない。

以下のようなエラーが出る

ガイドにあるように、
Specification -> HibernateSpec に変更しただけだとだめ。
ガイドは、ControllerUnitTest を implements しているが私のテストは、Service の試験。

なので、GrailsWebUnitTest を implements した。

を、

しかし、まだまだエラーが。

なんか、Transaction 系ね。
というわけで、 create-integration-test で生成されたものをそのまま使っていたが、@Rollback の記載を取ったら動いた。

ちなみに、Rollback は試験の HibernateSpec により、試験毎に rollback されるので@Rollback は不要。

挙動を変えるには、isRollback() を Override して、false を返せば rollbackされない

Service だけではく、Domain の試験でもこの方法で試験可能。

ただ、Domain の試験、MultiTenancyだと、unique が試験できなくなる。
これを解決するのは諦めた。