Grails db反向工程id和版本

Grails db反向工程id和版本,grails,mapping,grails-plugin,Grails,Mapping,Grails Plugin,我还不熟悉Grails和Hibernate,所以如果你回答这个问题,请记住我只使用了5天的IDE。我正在尝试连接MYSQL数据库。我将DB设置为更新,因为稍后需要更新。然后我运行db反向工程插件,它在STS中为所有表自动生成groovy文件。当我查看文件时,我注意到文件中有一个静态映射。我测试了一个表并创建了它的控制器来显示所有记录。它运行得很好。当我查看表结构时,它创建了两个新列“id”和“version”。我注意到静态映射如下所示: class TopTen { Integer ttM

我还不熟悉Grails和Hibernate,所以如果你回答这个问题,请记住我只使用了5天的IDE。我正在尝试连接MYSQL数据库。我将DB设置为更新,因为稍后需要更新。然后我运行db反向工程插件,它在STS中为所有表自动生成groovy文件。当我查看文件时,我注意到文件中有一个静态映射。我测试了一个表并创建了它的控制器来显示所有记录。它运行得很好。当我查看表结构时,它创建了两个新列“id”和“version”。我注意到静态映射如下所示:

class TopTen {

  Integer ttMlId
  Integer ttWeekId
  Integer ttAmount
  Integer ttRank

  static mapping = {
    id column: "tt_id"
    version false
  }
}
当我删除这些,然后它根本不工作。我可以理解第二行,但不理解为什么它会在DB中创建一个新列,我不理解它是什么版本,也不理解它为什么会在反向工程时放在那里

以下是MySQL数据库版本5.0.51中的db表

DROP TABLE IF EXISTS `top_ten`;
CREATE TABLE `top_ten` (
`tt_id` int(10) unsigned NOT NULL auto_increment,
`tt_ml_id` int(10) unsigned NOT NULL default '0',
`tt_week_id` int(10) unsigned NOT NULL default '601',
`tt_amount` int(10) unsigned NOT NULL default '0',
`tt_rank` int(10) unsigned NOT NULL default '0',
PRIMARY KEY  (`tt_id`)
) ENGINE=InnoDB AUTO_INCREMENT=511 DEFAULT CHARSET=latin1;

Hibernate可以使用乐观锁定,默认情况下,它为所有GORM域类启用。但是,如果在旧表中没有用于该列的列,或者出于某种原因希望显式禁用该列,则可以将
version false
添加到映射块中,它将不会处于活动状态

乐观锁定是通过将您认为正在编辑的版本与行更新时的当前版本进行比较来实现的,如果不匹配,则假定在读取行以显示编辑表单和提交更新数据之间存在其他用户的编辑。之所以称之为乐观,是因为没有显式锁定,这更安全,但成本更高,而且希望两个用户不会同时编辑同一行


如果您在数据库中看到一个带有该映射块的新“id”列,则说明有问题。这应该告诉GORM主键列有一个非标准列名“ttx_id”,并使用它来代替它通常使用的“id”列。请在Grails反向工程组件下创建一个错误报告,包括当前数据库表SQL和生成的域类的内容,我来看看。

Hibernate可以使用乐观锁定,默认情况下,它对所有GORM域类都启用。但是,如果在旧表中没有用于该列的列,或者出于某种原因希望显式禁用该列,则可以将
version false
添加到映射块中,它将不会处于活动状态

乐观锁定是通过将您认为正在编辑的版本与行更新时的当前版本进行比较来实现的,如果不匹配,则假定在读取行以显示编辑表单和提交更新数据之间存在其他用户的编辑。之所以称之为乐观,是因为没有显式锁定,这更安全,但成本更高,而且希望两个用户不会同时编辑同一行


如果您在数据库中看到一个带有该映射块的新“id”列,则说明有问题。这应该告诉GORM主键列有一个非标准列名“ttx_id”,并使用它来代替它通常使用的“id”列。请在Grails反向工程组件下创建一个bug报告,包括当前数据库表SQL和生成的域类的内容,我会看一看。

如果我能找到创建新问题的地方,我会的。我去了链接,但它不允许我发表新的文章。因此,问题版本为false,id映射到非标准的命名id列,但当我将db连接标记为update时,它仍然创建了“id和版本”列。如果我能够找到创建新问题的位置,您只需在I will注册一个帐户。我去了链接,但它不允许我发表新的文章。因此,问题是版本为false,id映射到非标准的命名id列,但当我将db连接标记为update时,它仍然创建了“id和版本”列。您只需在注册一个帐户