Sql server 使用SQL Server在grails上映射映射数据类型
我有一个名为Sql server 使用SQL Server在grails上映射映射数据类型,sql-server,grails,map,gorm,Sql Server,Grails,Map,Gorm,我有一个名为Regra的域类,其代码如下: Map<String, Permissao> permissoes = [:] static hasMany = [permissoes: Permissao] 如果我对Regradomain类做了任何更改(甚至添加了一个空行),并等待Grails重新加载这个类,那么一切都正常 这是我在Regra表已经有一些数据后重新启动服务器时得到的堆栈跟踪: 2014-04-04 08:42:09,281 [Compass Gps Index [po
Regra
的域类,其代码如下:
Map<String, Permissao> permissoes = [:]
static hasMany = [permissoes: Permissao]
如果我对Regra
domain类做了任何更改(甚至添加了一个空行),并等待Grails重新加载这个类,那么一切都正常
这是我在Regra表已经有一些数据后重新启动服务器时得到的堆栈跟踪:
2014-04-04 08:42:09,281 [Compass Gps Index [pool-8-thread-14]] ERROR indexer.ScrollableHibernateIndexEntitiesIndexer - {hibernate}: Failed to index the database
Message: org.hibernate.collection.PersistentMap cannot be cast to java.lang.Number
Line | Method
->> 38 | doToString in org.compass.core.converter.basic.AbstractNumberConverter
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 189 | toString in org.compass.core.converter.basic.AbstractBasicConverter
| 54 | marshall . . . . . . . . in ''
| 435 | convertId in org.compass.core.converter.mapping.osem.ClassMappingConverter
| 410 | marshallIds . . . . . . in ''
| 87 | marshallIds in org.compass.core.marshall.DefaultMarshallingStrategy
| 76 | doMarshall . . . . . . . in org.compass.core.converter.mapping.osem.ReferenceMappingConverter
| 48 | marshall in org.compass.core.converter.mapping.osem.AbstractRefAliasMappingConverter
| 213 | doMarshall . . . . . . . in org.compass.core.converter.mapping.osem.ClassMappingConverter
| 97 | marshall in ''
| 154 | marshall . . . . . . . . in org.compass.core.marshall.DefaultMarshallingStrategy
| 408 | create in org.compass.core.impl.DefaultCompassSession
| 397 | create . . . . . . . . . in ''
| 305 | create in org.compass.core.impl.ExistingCompassSession
| 212 | flush . . . . . . . . . in org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer$RowBuffer
| 206 | close in ''
| 151 | performIndex . . . . . . in org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer
| 104 | doInCompassWithoutResult in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1$1
| 29 | doInCompass . . . . . . in org.compass.core.CompassCallbackWithoutResult
| 133 | execute in org.compass.core.CompassTemplate
| 147 | executeForIndex . . . . in org.compass.gps.impl.SingleCompassGps
| 102 | call in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1
| 262 | run . . . . . . . . . . in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run in java.lang.Thread
Error |
2014-04-04 08:42:09,615 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: Failed to index, execution exception; nested exception is java.util.concurrent.ExecutionException: org.compass.gps.device.hibernate.HibernateGpsDeviceException: {hibernate}: Failed to index the database; nested exception is java.lang.ClassCastException: org.hibernate.collection.PersistentMap cannot be cast to java.lang.Number
Message: Failed to index, execution exception; nested exception is java.util.concurrent.ExecutionException: org.compass.gps.device.hibernate.HibernateGpsDeviceException: {hibernate}: Failed to index the database; nested exception is java.lang.ClassCastException: org.hibernate.collection.PersistentMap cannot be cast to java.lang.Number
Line | Method
->> 126 | performIndex in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 119 | index in org.compass.gps.device.support.parallel.AbstractParallelGpsDevice
| 42 | buildIndexIfNeeded in org.compass.gps.impl.DefaultReplaceIndexCallback
| 281 | firstStep in org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager$ReplaceIndexOperationCallback
| 218 | doOperate . . . . in org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager
| 266 | doReplaceIndex in ''
| 261 | replaceIndex . . . in ''
| 118 | doIndex in org.compass.gps.impl.SingleCompassGps
| 154 | index . . . . . . in org.compass.gps.impl.AbstractCompassGps
| 128 | index in ''
| 49 | index . . . . . . in grails.plugin.searchable.internal.compass.CompassGpsUtils
| 157 | doCall in SearchableGrailsPlugin$_closure3
| 262 | run . . . . . . . in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run in java.lang.Thread
Caused by ExecutionException: org.compass.gps.device.hibernate.HibernateGpsDeviceException: {hibernate}: Failed to index the database; nested exception is java.lang.ClassCastException: org.hibernate.collection.PersistentMap cannot be cast to java.lang.Number
->> 122 | report in java.util.concurrent.FutureTask
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 188 | get in ''
| 122 | performIndex . . . in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor
| 119 | index in org.compass.gps.device.support.parallel.AbstractParallelGpsDevice
| 42 | buildIndexIfNeeded in org.compass.gps.impl.DefaultReplaceIndexCallback
| 281 | firstStep in org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager$ReplaceIndexOperationCallback
| 218 | doOperate . . . . in org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager
| 266 | doReplaceIndex in ''
| 261 | replaceIndex . . . in ''
| 118 | doIndex in org.compass.gps.impl.SingleCompassGps
| 154 | index . . . . . . in org.compass.gps.impl.AbstractCompassGps
| 128 | index in ''
| 49 | index . . . . . . in grails.plugin.searchable.internal.compass.CompassGpsUtils
| 157 | doCall in SearchableGrailsPlugin$_closure3
| 262 | run . . . . . . . in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run in java.lang.Thread
Caused by HibernateGpsDeviceException: {hibernate}: Failed to index the database; nested exception is java.lang.ClassCastException: org.hibernate.collection.PersistentMap cannot be cast to java.lang.Number
->> 172 | performIndex in org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 104 | doInCompassWithoutResult in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1$1
| 29 | doInCompass . . . in org.compass.core.CompassCallbackWithoutResult
| 133 | execute in org.compass.core.CompassTemplate
| 147 | executeForIndex . in org.compass.gps.impl.SingleCompassGps
| 102 | call in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1
| 262 | run . . . . . . . in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run in java.lang.Thread
Caused by ClassCastException: org.hibernate.collection.PersistentMap cannot be cast to java.lang.Number
->> 38 | doToString in org.compass.core.converter.basic.AbstractNumberConverter
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 189 | toString in org.compass.core.converter.basic.AbstractBasicConverter
| 54 | marshall . . . . . in ''
| 435 | convertId in org.compass.core.converter.mapping.osem.ClassMappingConverter
| 410 | marshallIds . . . in ''
| 87 | marshallIds in org.compass.core.marshall.DefaultMarshallingStrategy
| 76 | doMarshall . . . . in org.compass.core.converter.mapping.osem.ReferenceMappingConverter
| 48 | marshall in org.compass.core.converter.mapping.osem.AbstractRefAliasMappingConverter
| 213 | doMarshall . . . . in org.compass.core.converter.mapping.osem.ClassMappingConverter
| 97 | marshall in ''
| 154 | marshall . . . . . in org.compass.core.marshall.DefaultMarshallingStrategy
| 408 | create in org.compass.core.impl.DefaultCompassSession
| 397 | create . . . . . . in ''
| 305 | create in org.compass.core.impl.ExistingCompassSession
| 212 | flush . . . . . . in org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer$RowBuffer
| 206 | close in ''
| 151 | performIndex . . . in org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer
| 104 | doInCompassWithoutResult in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1$1
| 29 | doInCompass . . . in org.compass.core.CompassCallbackWithoutResult
| 133 | execute in org.compass.core.CompassTemplate
| 147 | executeForIndex . in org.compass.gps.impl.SingleCompassGps
| 102 | call in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1
| 262 | run . . . . . . . in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run in java.lang.Thread
从stacktrace中可以看出,异常似乎是在索引操作中抛出的。这可能是域类和搜索索引之间的映射问题。索引操作中是否引发此异常?据我所知,这可能是域类和搜索索引之间的映射问题。将这两个域类添加到问题中。如果无法添加实际类,则至少反映实际实现。@ManuelVio我确实安装了
searchable
插件。我从searchable的索引中排除了permissoes
,它起了作用。(static searchable={except=['id','version','permissoes']}
谢谢,请提交一个答案,这样我就可以颁发奖项了。
2014-04-04 08:42:09,281 [Compass Gps Index [pool-8-thread-14]] ERROR indexer.ScrollableHibernateIndexEntitiesIndexer - {hibernate}: Failed to index the database
Message: org.hibernate.collection.PersistentMap cannot be cast to java.lang.Number
Line | Method
->> 38 | doToString in org.compass.core.converter.basic.AbstractNumberConverter
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 189 | toString in org.compass.core.converter.basic.AbstractBasicConverter
| 54 | marshall . . . . . . . . in ''
| 435 | convertId in org.compass.core.converter.mapping.osem.ClassMappingConverter
| 410 | marshallIds . . . . . . in ''
| 87 | marshallIds in org.compass.core.marshall.DefaultMarshallingStrategy
| 76 | doMarshall . . . . . . . in org.compass.core.converter.mapping.osem.ReferenceMappingConverter
| 48 | marshall in org.compass.core.converter.mapping.osem.AbstractRefAliasMappingConverter
| 213 | doMarshall . . . . . . . in org.compass.core.converter.mapping.osem.ClassMappingConverter
| 97 | marshall in ''
| 154 | marshall . . . . . . . . in org.compass.core.marshall.DefaultMarshallingStrategy
| 408 | create in org.compass.core.impl.DefaultCompassSession
| 397 | create . . . . . . . . . in ''
| 305 | create in org.compass.core.impl.ExistingCompassSession
| 212 | flush . . . . . . . . . in org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer$RowBuffer
| 206 | close in ''
| 151 | performIndex . . . . . . in org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer
| 104 | doInCompassWithoutResult in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1$1
| 29 | doInCompass . . . . . . in org.compass.core.CompassCallbackWithoutResult
| 133 | execute in org.compass.core.CompassTemplate
| 147 | executeForIndex . . . . in org.compass.gps.impl.SingleCompassGps
| 102 | call in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1
| 262 | run . . . . . . . . . . in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run in java.lang.Thread
Error |
2014-04-04 08:42:09,615 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: Failed to index, execution exception; nested exception is java.util.concurrent.ExecutionException: org.compass.gps.device.hibernate.HibernateGpsDeviceException: {hibernate}: Failed to index the database; nested exception is java.lang.ClassCastException: org.hibernate.collection.PersistentMap cannot be cast to java.lang.Number
Message: Failed to index, execution exception; nested exception is java.util.concurrent.ExecutionException: org.compass.gps.device.hibernate.HibernateGpsDeviceException: {hibernate}: Failed to index the database; nested exception is java.lang.ClassCastException: org.hibernate.collection.PersistentMap cannot be cast to java.lang.Number
Line | Method
->> 126 | performIndex in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 119 | index in org.compass.gps.device.support.parallel.AbstractParallelGpsDevice
| 42 | buildIndexIfNeeded in org.compass.gps.impl.DefaultReplaceIndexCallback
| 281 | firstStep in org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager$ReplaceIndexOperationCallback
| 218 | doOperate . . . . in org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager
| 266 | doReplaceIndex in ''
| 261 | replaceIndex . . . in ''
| 118 | doIndex in org.compass.gps.impl.SingleCompassGps
| 154 | index . . . . . . in org.compass.gps.impl.AbstractCompassGps
| 128 | index in ''
| 49 | index . . . . . . in grails.plugin.searchable.internal.compass.CompassGpsUtils
| 157 | doCall in SearchableGrailsPlugin$_closure3
| 262 | run . . . . . . . in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run in java.lang.Thread
Caused by ExecutionException: org.compass.gps.device.hibernate.HibernateGpsDeviceException: {hibernate}: Failed to index the database; nested exception is java.lang.ClassCastException: org.hibernate.collection.PersistentMap cannot be cast to java.lang.Number
->> 122 | report in java.util.concurrent.FutureTask
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 188 | get in ''
| 122 | performIndex . . . in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor
| 119 | index in org.compass.gps.device.support.parallel.AbstractParallelGpsDevice
| 42 | buildIndexIfNeeded in org.compass.gps.impl.DefaultReplaceIndexCallback
| 281 | firstStep in org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager$ReplaceIndexOperationCallback
| 218 | doOperate . . . . in org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager
| 266 | doReplaceIndex in ''
| 261 | replaceIndex . . . in ''
| 118 | doIndex in org.compass.gps.impl.SingleCompassGps
| 154 | index . . . . . . in org.compass.gps.impl.AbstractCompassGps
| 128 | index in ''
| 49 | index . . . . . . in grails.plugin.searchable.internal.compass.CompassGpsUtils
| 157 | doCall in SearchableGrailsPlugin$_closure3
| 262 | run . . . . . . . in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run in java.lang.Thread
Caused by HibernateGpsDeviceException: {hibernate}: Failed to index the database; nested exception is java.lang.ClassCastException: org.hibernate.collection.PersistentMap cannot be cast to java.lang.Number
->> 172 | performIndex in org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 104 | doInCompassWithoutResult in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1$1
| 29 | doInCompass . . . in org.compass.core.CompassCallbackWithoutResult
| 133 | execute in org.compass.core.CompassTemplate
| 147 | executeForIndex . in org.compass.gps.impl.SingleCompassGps
| 102 | call in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1
| 262 | run . . . . . . . in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run in java.lang.Thread
Caused by ClassCastException: org.hibernate.collection.PersistentMap cannot be cast to java.lang.Number
->> 38 | doToString in org.compass.core.converter.basic.AbstractNumberConverter
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 189 | toString in org.compass.core.converter.basic.AbstractBasicConverter
| 54 | marshall . . . . . in ''
| 435 | convertId in org.compass.core.converter.mapping.osem.ClassMappingConverter
| 410 | marshallIds . . . in ''
| 87 | marshallIds in org.compass.core.marshall.DefaultMarshallingStrategy
| 76 | doMarshall . . . . in org.compass.core.converter.mapping.osem.ReferenceMappingConverter
| 48 | marshall in org.compass.core.converter.mapping.osem.AbstractRefAliasMappingConverter
| 213 | doMarshall . . . . in org.compass.core.converter.mapping.osem.ClassMappingConverter
| 97 | marshall in ''
| 154 | marshall . . . . . in org.compass.core.marshall.DefaultMarshallingStrategy
| 408 | create in org.compass.core.impl.DefaultCompassSession
| 397 | create . . . . . . in ''
| 305 | create in org.compass.core.impl.ExistingCompassSession
| 212 | flush . . . . . . in org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer$RowBuffer
| 206 | close in ''
| 151 | performIndex . . . in org.compass.gps.device.hibernate.indexer.ScrollableHibernateIndexEntitiesIndexer
| 104 | doInCompassWithoutResult in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1$1
| 29 | doInCompass . . . in org.compass.core.CompassCallbackWithoutResult
| 133 | execute in org.compass.core.CompassTemplate
| 147 | executeForIndex . in org.compass.gps.impl.SingleCompassGps
| 102 | call in org.compass.gps.device.support.parallel.ConcurrentParallelIndexExecutor$1
| 262 | run . . . . . . . in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run in java.lang.Thread