代码之家  ›  专栏  ›  技术社区  ›  Straightfw

在Grails中构建具有复合键的表时出现NullPointerException

  •  0
  • Straightfw  · 技术社区  · 6 年前

    我有一个表(Oracle12CDB),它在Grails(3.3.9)中不包含显式ID列,我想动态构建它。因此,我尝试创建一个由所有列组成的复合键(它们都不可为null),因为这是我能找到的唯一解决方法,因此代码如下所示:

    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 回复  |  直到 6 年前