在Grails中使用复合键构建表格时发生NullPointerException

时间:2019-02-04 09:22:46

标签: java oracle grails gorm grails3

我有一个表(Oracle 12c DB),该表在Grails(3.3.9)中不包含显式ID列,我想动态地对其进行支撑。因此,我试图创建一个由其所有列组成的复合键(它们都不为空),因为这是我唯一能找到的解决方法,因此代码如下所示:

class AliasFrequencyDict implements Serializable{
    String frequency
    String unit
    String description
    String lang

    static constraints = {
        frequency maxSize: 10, sqlType: 'VARCHAR2'
        unit maxSize: 1, sqlType: 'VARCHAR2'
        description maxSize: 30, sqlType: 'VARCHAR2'
        lang maxSize: 2, sqlType: 'VARCHAR2'
    }

    static mapping = {
        sort 'frequency'
        version false
        id composite: ['frequency', 'unit', 'description', 'lang']
    }
}

在控制器中,我仅拥有static scaffold = AliasFrequencyDict。但是,当我尝试访问索引时,我得到一个java.lang.NullPointerException并显示一条消息,内容为Request processing failed; nested exception is org.grails.gsp.GroovyPagesException: Error processing GroovyPageView: [Byte array resource [view:-,-,aliasFrequencyDict:index]:21] Error executing tag <f:table>: null。 stacktrace看起来像这样:

    Line | Method
->>  473 | createGroovyPageException    in Byte array resource [view:-,-,aliasFrequencyDict:index]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

Caused by GrailsTagException: [Byte array resource [view:-,-,aliasFrequencyDict:index]:21] Error executing tag <f:table>: null
->>   21 | throwRootCause               in Byte array resource [view:-,-,aliasFrequencyDict:index]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

Caused by NullPointerException: null
->>   35 | <init>                       in org.grails.scaffolding.model.property.DomainPropertyImpl
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|     26 | build                        in org.grails.scaffolding.model.property.DomainPropertyFactoryImpl
|    118 | getListOutputProperties . .  in org.grails.scaffolding.model.DomainModelServiceImpl
|    540 | resolvePersistentProperties  in grails.plugin.formfields.FormFieldsTagLib
|    415 | resolvePropertyNames . . . . in     ''
|    402 | resolveProperties            in     ''
|    230 | doCall . . . . . . . . . . . in grails.plugin.formfields.FormFieldsTagLib$_closure4
|    446 | invokeTagLibClosure          in org.grails.gsp.GroovyPage
|    364 | invokeTag . . . . . . . . .  in     ''
|     54 | doCall                       in Byte_array_resource__view_____aliasFrequencyDict_index_$_run_closure2
|    200 | executeClosure . . . . . . . in org.grails.taglib.TagBodyClosure
|    102 | captureClosureOutput         in     ''
|    213 | call . . . . . . . . . . . . in     ''
|     48 | captureTagContent            in org.grails.plugins.web.taglib.SitemeshTagLib
|    156 | doCall . . . . . . . . . . . in org.grails.plugins.web.taglib.SitemeshTagLib$_closure3
|    446 | invokeTagLibClosure          in org.grails.gsp.GroovyPage
|    364 | invokeTag . . . . . . . . .  in     ''
|     72 | run                          in Byte_array_resource__view_____aliasFrequencyDict_index_
|    162 | doWriteTo . . . . . . . . .  in org.grails.gsp.GroovyPageWritable
|     82 | writeTo                      in     ''
|     76 | renderTemplate . . . . . . . in org.grails.web.servlet.view.GroovyPageView
|     71 | renderWithinGrailsWebRequest in org.grails.web.servlet.view.AbstractGrailsView
|     55 | renderMergedOutputModel . .  in     ''
|    303 | render                       in org.springframework.web.servlet.view.AbstractView
|    150 | renderInnerView . . . . . .  in org.grails.web.sitemesh.GrailsLayoutView
|    128 | obtainContent                in     ''
|     63 | renderTemplate . . . . . . . in     ''
|     71 | renderWithinGrailsWebRequest in org.grails.web.servlet.view.AbstractGrailsView
|     55 | renderMergedOutputModel . .  in     ''
|    303 | render                       in org.springframework.web.servlet.view.AbstractView
|   1286 | render . . . . . . . . . . . in org.springframework.web.servlet.DispatcherServlet
|   1041 | processDispatchResult        in     ''
|    984 | doDispatch . . . . . . . . . in     ''
|    901 | doService                    in     ''
|    970 | processRequest . . . . . . . in org.springframework.web.servlet.FrameworkServlet
|    861 | doGet                        in     ''
|    846 | service . . . . . . . . . .  in     ''
|     55 | doFilterInternal             in org.springframework.boot.web.filter.ApplicationContextHeaderFilter
|     77 | doFilterInternal . . . . . . in org.grails.web.servlet.mvc.GrailsWebRequestFilter
|     67 | doFilterInternal             in org.grails.web.filters.HiddenHttpMethodFilter
|   1149 | runWorker . . . . . . . . .  in java.util.concurrent.ThreadPoolExecutor
|    624 | run                          in java.util.concurrent.ThreadPoolExecutor$Worker
^    748 | run . . . . . . . . . . . .  in java.lang.Thread

为什么会这样?如何解决此问题,以便脚手架再次开始工作?

0 个答案:

没有答案