grails中带有javaDB和Hibernate的用户表
让我们看看我能否以一种可以理解的方式问这个问题 我从grails开始创建了一个名为user的域类。据我所知,Hibernate用于将这个域类映射到数据库。这在hsqldb中运行得非常好 现在我尝试切换到javaDB并得到一条错误消息,因为该表名为“user”(这似乎是javaDB的保留字) 这样的声明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配置
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是的,没有想到这一点。