2016-07-23 7 views
1

Grails 3.2.0.M2がインストールされ、Groupという名前の新しいドメインクラスが作成されました。私はその後、generate-all *のコマンドを実行し、GroupControllerに閲覧しようとしましたが、このエラーで迎えられた。無効なドメインクラス名となる単語

ここで起こっている
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] 

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

奇妙なことには問題がなくなるということであればドメインクラスとコントローラの名前をそれぞれGroupzGroupzControllerに変更します。なぜ私はドメインクラスグループに名前を付けられないのですか?ドメインクラスに違法な名前はありますか?

答えて

2

予約語のリストは、Grails wikiにあります。

また、あなたのクラスの名前を変更するstatic mapping propertyを使用してこの問題を回避することができます

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

を指定されたマッピングにクラス名として自分のドメイン/エンティティを参照内部的にバインドします。これは、[この古い答え](http://stackoverflow.com/a/9468002/160313)に見られるように、Hibernateにそのデータベースの正しい引用/エスケープを使用させます。 –

0

は、まあ、すべてのドメインクラスをスキャンし、道

ユーザーを次のように名前に変換されます - > user UserMapping - > user_mapping などです。

基本的には、文字列は大文字で分割され、その後には_で区切られます。

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

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

あなたはまだ、あなたがmappingブロックを使用して、テーブル名を変更することができますGrailsの中でこれらの名前を使用する場合。 Grailsはあなたがまた、予約語を使用していますが、バッククォート文字で囲むし続けることができ

例えば

static mapping { 
    table : 'my_table_name' 
} 
関連する問題