Micronaut / Grails で起動時に以下のようなエラー。
現象
mapping で、複数のindexを複数指定している場合に発生している模様。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: SQL strings added more than once for: xxxxxxxxxx.IDX-yyyyyyyyyyy_idx at org.hibernate.tool.schema.internal.SchemaCreatorImpl.checkExportIdentifier(SchemaCreatorImpl.java:409) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:335) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:167) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:136) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:122) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:164) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:81) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:327) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:471) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:728) at org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration.buildSessionFactory(HibernateMappingContextConfiguration.java:287) at org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory.create(HibernateConnectionSourceFactory.java:86) at org.grails.orm.hibernate.connections.AbstractHibernateConnectionSourceFactory.create(AbstractHibernateConnectionSourceFactory.java:39) at org.grails.orm.hibernate.connections.AbstractHibernateConnectionSourceFactory.create(AbstractHibernateConnectionSourceFactory.java:23) at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:64) at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:52) at org.grails.datastore.mapping.core.connections.ConnectionSourcesInitializer.create(ConnectionSourcesInitializer.groovy:24) at org.grails.orm.hibernate.HibernateDatastore.<init>(HibernateDatastore.java:212) at org.grails.orm.hibernate.HibernateDatastore.<init>(HibernateDatastore.java:233) at io.micronaut.configuration. |
修正方法
1 2 3 4 |
static mapping = { col1 index: 'col1_idx, col_date_idx, col_type1_idx' |
のように、indexの指定の,区切りに空白を入れない。
1 2 3 4 |
static mapping = { col1 index: 'col1_idx,col_date_idx,col_type1_idx' |
原因
テーブル名の接頭語が被っていると同様の現象が発生しているような記述を見かけた。
確かに今回のプロジェクトだと、テーブル名の接頭語が被っているがそこは変更できない。
他のテーブルだとカンマの後に空白があって問題がないので、テーブル名の接頭語が被ってることで何らかの影響で上記現象が発生していると思われるが、根本原因はわからず、探る時間もなし!