2016-05-09 9 views
2

Ich versuche "erzwungene Typen" für BOOLEANs zu verwenden, wenn wir mit jOOQ 3.7 Klassen für unsere Oracle-Datenbank generieren.Force Boolean Type mit jOOQ throws NPE

Die Tabelle sieht wie folgt aus:

CREATE TABLE outable_name 
(
    id INTEGER NOT NULL, 
    -- ... 
    some_boolean_field INTEGER DEFAULT 0 NOT NULL 
); 

die Java-Klassen zu generieren Gradle verwendet wird. Der relevante Teil sieht wie folgt aus:

database() { 
    name('org.jooq.util.oracle.OracleDatabase') 
    inputSchema(properties.getProperty('db.user')) 
    includes('.*') 
    forcedTypes() { 
    forcedType() { 
     name('BOOLEAN') 
     expression('some_boolean_field') 
     types('.*') 
    } 
    } 
} 

Wenn die gradle-Aufgabe mit Info-Ausgabe läuft der folgende Fehler ausgelöst:

Error while generating table record ***.*** (obfuscated) 
java.lang.NullPointerException 
     at java.util.regex.Matcher.getTextLength(Matcher.java:1283) 
     at java.util.regex.Matcher.reset(Matcher.java:309) 
     at java.util.regex.Matcher.<init>(Matcher.java:229) 
     at java.util.regex.Pattern.matcher(Pattern.java:1093) 
     at org.jooq.util.AbstractTypedElementDefinition.mapDefinedType(AbstractTypedElementDefinition.java:174) 
     at org.jooq.util.AbstractTypedElementDefinition.getType(AbstractTypedElementDefinition.java:114) 
     at org.jooq.util.DefaultColumnDefinition.getType(DefaultColumnDefinition.java:51) 
     at org.jooq.util.JavaGenerator.refRowType(JavaGenerator.java:1241) 
     at org.jooq.util.JavaGenerator.generateRecord(JavaGenerator.java:838) 
     at org.jooq.util.JavaGenerator.generateRecord(JavaGenerator.java:797) 
     at org.jooq.util.JavaGenerator.generateRecord(JavaGenerator.java:785) 
     at org.jooq.util.JavaGenerator.generateRecords(JavaGenerator.java:772) 
     at org.jooq.util.JavaGenerator.generate(JavaGenerator.java:327) 
     at org.jooq.util.JavaGenerator.generate(JavaGenerator.java:267) 
     at org.jooq.util.GenerationTool.run(GenerationTool.java:434) 
     at org.jooq.util.GenerationTool.generate(GenerationTool.java:180) 
     at org.jooq.util.GenerationTool$generate.call(Unknown Source) 
     at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) 
     at ... 
+0

Ich denke, Sie könnten [in dieser Ausgabe] (h ttp: //stackoverflow.com/q/11388838/521799), aber ich bin mir nicht sicher, welcher der Ausdrücke (vielleicht 'Ausdruck'?) der Konflikt ist ... –

Antwort

1

Call "Name" direkt mit invokeMethod:

database() { 
    name('org.jooq.util.oracle.OracleDatabase') 
    inputSchema(properties.getProperty('db.user')) 
    includes('.*') 
    forcedTypes() { 
    forcedType() { 
     delegate.invokeMethod('name', [ 
             'BOOLEAN' 
            ] 
    ) 
    expression('.*\\.is_.*|.*\\.has_.*') 
    types('CHAR\\(1\\)') 
    } 
    } 
} 

Erklärung in Groovy MarkupBuilder name conflict