grails中带有javaDB和Hibernate的用户表

grails中带有javaDB和Hibernate的用户表,hibernate,orm,grails,derby,javadb,Hibernate,Orm,Grails,Derby,Javadb,让我们看看我能否以一种可以理解的方式问这个问题 我从grails开始创建了一个名为user的域类。据我所知,Hibernate用于将这个域类映射到数据库。这在hsqldb中运行得非常好 现在我尝试切换到javaDB并得到一条错误消息,因为该表名为“user”(这似乎是javaDB的保留字) 这样的声明 create table user ... 将导致错误消息 create table "user" ... 工作正常,但Hibernate似乎没有将表名放在引号中 如何将Hibernate配置

让我们看看我能否以一种可以理解的方式问这个问题

我从grails开始创建了一个名为user的域类。据我所知,Hibernate用于将这个域类映射到数据库。这在hsqldb中运行得非常好

现在我尝试切换到javaDB并得到一条错误消息,因为该表名为“user”(这似乎是javaDB的保留字)

这样的声明

create table user ...
将导致错误消息

create table "user" ...
工作正常,但Hibernate似乎没有将表名放在引号中

如何将Hibernate配置为使用引号以使其与我的表名一起工作

PS:是的,我知道,我可以将域类映射到另一个表名…:-)

您是否尝试用双引号将名称括起来:

class User {
  ..
  static mapping = {
      table '"user"'
  }
}
更新:这样做的结果之一是,您还必须使用关键字自定义联接表的名称。这听起来很合理,但约定是Grails的好处之一,不依赖它们在某种程度上违背了Grails的理念。我个人会避免在这里使用保留字(即不是
user
)。

明白了。 正如Pascal已经提到的,映射条目是关键。但不是使用双引号,倒勾将带来成功:

static mapping = {
  table "`user"
}
这告诉hibernate在生成sql时将表名放在引号中。 它似乎也适用于所有相应的表。。。但不知怎的,它在其中一些中删除了“user”的最后一个字符…:-(

因此,似乎将域类重新映射到不会导致任何问题的表名将是最好的方法:

static mapping = {
  table "appuser"
}

请更正hybernate->hibernate以确保标记一致性。由于hibernate创建的其他表的名称中包含此表名,因此不起作用。i名称:不成功:创建表“user”\u权限(user\u id bigint,permissions\u string varchar(255))@Ralf Ah是的,没有想到这一点。