2016-07-23 15 views
1

Ich habe gerade Grails 3.2.0.M2 installiert und eine neue Domänenklasse namens Group erstellt. Ich lief dann den generate-all * Befehl und versucht, die GroupController zu sucht, war aber mit diesem Fehler begrüßt:Welche Wörter sind ungültige Domänenklassennamen?

URI:  /group/index 
Class:  org.h2.jdbc.JdbcSQLException 
Message: null 
Caused by: Syntax error in SQL statement "SELECT COUNT(*) AS Y0_ FROM GROUP[*] THIS_ "; expected "identifier"; SQL statement: select count(*) as y0_ from group this_ [42001-192] 

Welche geschieht hier:

def index(Integer max) { 
    params.max = Math.min(max ?: 10, 100) 
    respond Group.list(params), model:[groupCount: Group.count()] // Error occurs here 
} 

Das Seltsame ist, dass das Problem verschwindet, wenn Ich benenne die Domain-Klasse und den Controller in Groupz bzw. GroupzController um. Warum kann ich meine Domänenklassengruppe nicht benennen? Welche anderen Namen sind für Domain-Klassen illegal?

Antwort

2

Sie können eine Liste der reservierten Wörter auf der Grails wiki finden. Alternativ

, können Sie dieses Problem, indem Sie die die static mapping property mit Ihrer Klasse umbenennen:

class Group { 
    ... 
    static mapping = { table 'my_group' } 
    ... 
} 
+1

Sie können auch das reservierte Wort benutzen fortsetzen, aber es in Graviszeichen Zeichen zu umschließen; Dadurch wird Hibernate dazu gebracht, das korrekte Anführungszeichen für diese Datenbank zu verwenden, wie in [dieser älteren Antwort] (http://stackoverflow.com/a/9468002/160313) zu sehen ist. –

0

Nun, die alle Domain-Klassen werden gescannt und umgewandelt, um die Namen in Art und Weise folgende

Benutzer - > Benutzer UserMapping -> user_mapping und so weiter.

Basicall der Kamelfall ist String wird durch das Großbuchstabe getrennt und dann durch _ getrennt.

You cannot use any Domain class name that results in the >restricted/reserved words in sql.

e.q group, select, where, from, join, etc

wenn Sie immer noch diese Namen in Grails verwenden möchten, dann können Sie den Tabellennamen mapping Block mit ändern. Grails wird an Ihre Domain/Einheit als den Klassennamen beziehen sich aber intern binden sie an das Mapping angegeben

beispiels

static mapping { 
    table : 'my_table_name' 
}