精通Grails: Grails与遗留数据库 - 编程入门网
| |
| longitude | varchar(30) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
8 rows in set (0.01 sec)
mysql> select count(*) from usgs_airports;
+----------+
| count(*) |
+----------+
| 901 |
+----------+
1 row in set (0.44 sec)
mysql> select * from usgs_airports limit 1\G
*************************** 1. row ***************************
airport_id: 1
locid: KOA
feature: Airport
airport_name: Kona International At Keahole
state: HI
county: Hawaii County
latitude: 19.73573112487793
longitude: -156.042831420898438
精通Grails: Grails与遗留数据库(6)时间:2011-07-29 IBM Scott Davis禁用 dbCreate 遗留表就位之后,您需要做最后一件事:禁用 grails-app/conf/DataSource.groovy 中的 dbCreate 变量。回想一下 “GORM:有趣的名称,严肃的技术” 就会知道,如果相应的表不存在的话,该变量会指 示 GORM 在后台创建它,并且会改变任何现有表,从而匹配 Grails 域类。因此,如果要处理遗留表的话 ,就一定要禁用该特性,这样 GORM 才不会破坏其他应用程序可能会用到的模式。 如果能够有选择地为特定的表启用或禁用 dbCreate 就好了。不幸的是,它是一个全局的 “全有或全 无” 的设置。我遇到既有新表又有遗留表的情况时,会先允许 GORM 创建新表,然后禁用 dbCreate,导 入现有的遗留表。在这样的情况下,您就会了解到有一个好的备份与恢复策略是多么重要了。 静态映射块 我将示范的第一个将域类映射到遗留表的策略是使用静态 mapping 块。大多数情况下我都会使用这个 块,因为它感觉最像 Grails。我习惯将静态 constraints 块添加到域类,这样添加静态 mapping 块感 觉起来和添加框架的其余部分是一致的。 将 grails-app/domain/Airport.groovy 文件复制到 grails-app/domain/AirportMapping.groovy。 这个名称只是为了示范用的。因为将会有三个类全部映射回相同的表中,因此需要有一种方式来将每一个 类单独命名(这在真实的应用程序中不大可能会发生)。 注释掉城市与国家字段,因为在新的表中没有这些字段。然后从 constraints 块中移除这些字段。现 在添加 mapping 块,将 Grails 的名称链接到数据库名,如清单 8 所示: 清单 8. AirportMapping.groovy
精通Grails: Grails与遗留数据库(7)时间:2011-07-29 IBM Scott Davismapping 块的第一条语句将 AirportMapping 类链接到 usgs_airports 表。下一条语句通知 Grails 表没有 version 列(GORM 通常会创建一个 version 列来优化乐观锁定 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |