4

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

我从 grails 开始并创建了一个名为 user 的域类。据我了解,Hibernate 用于将这个域类映射到数据库。这对 hsqldb 非常有效。

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

所以像这样的声明

create table user ...

将导致错误消息。

create table "user" ...

有效,但 Hibernate 似乎没有将表名放在引号中。

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

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

4

2 回答 2

1

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

class User {
  ..
  static mapping = {
      table '"user"'
  }
}

更新:这样做的结果之一是您也必须使用joinTable关键字自定义连接表的名称。这听起来很合理,但约定是 Grails 的好处之一,不依赖它们在某种程度上违背了它的理念。我个人只是避免user在这里使用保留字(即 not )。

于 2010-04-16T08:17:05.907 回答
0

知道了。正如 Pascal 已经提到的,映射条目是关键。但不是使用双引号,反引号会带来成功:

static mapping = {
  table "`user"
}

这告诉 hibernate 在生成 sql 时将表名放在引号中。它似乎也适用于所有相应的表格......但不知何故,它在其中一些表格中删除了“用户”的最后一个字符...... :-(

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

static mapping = {
  table "appuser"
}
于 2010-04-17T19:48:29.640 回答