我刚刚安装了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
}
奇怪的是,如果我将域类和控制器分别重命名为Groupz
和GroupzController
,问题就会消失。为什么我不能命名我的域类组?域名类有哪些其他名称是非法的?
答案 0 :(得分:2)
您可以在Grails wiki上找到保留字列表。
或者,您可以使用static mapping property重命名您的课程来解决此问题:
class Group {
...
static mapping = { table 'my_group' }
...
}
答案 1 :(得分:0)
所有域类都被扫描并以下列方式转换为名称
用户 - >用户 UserMapping - > user_mapping 等等。
Basicall驼峰大小写是字符串由大写字符分割,然后用_
分隔。
您不能使用导致sql中的>限制/保留字的任何域类名称。
e.q组,选择,在哪里,从,加入等
如果您仍想在Grails中使用这些名称,则可以使用mapping
块更改表名。 Grails将您的域/实体称为类名,但在内部将其绑定到指定的映射
e.g
static mapping {
table : 'my_table_name'
}