[Grails] grails的domain类必须有主键吗?
Aaron5
2011-11-03
如题:grails的domain类必须有主键吗?
我现在发生个问题,比如我的mysql中有一张test表: DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `fid` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `desc` varchar(300) DEFAULT NULL COMMENT '描述', PRIMARY KEY (`fid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 我使用create-domain-class Test 来创建一个domain类: class Test { static mapping = { table 'test' version false } Integer fid String desc static constraints = { } } 用create-controller Test 来创建 controller类: class TestController { //启用了脚手架功能 def scaffold = Test } 结果访问test的列表页面出现异常: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'this_.id' in 'field list' at com.mysql.jdbc.Util.handleNewInstance(Util.java:407) at com.mysql.jdbc.Util.getInstance(Util.java:382) ...... |
|
kidli
2011-11-03
需要主键,你这个代码启动的时候肯定有错误没注意看吧。
从你这个domain的定义来看,使用了默认的自增主键id,但是你又自己建了一张表,表里已经有一个自增的字段fid了,启动的时候肯定会提示无法创建id字段,后面的异常也就自然出现了。 建议你把表删掉,让grails自己创建。 如果主键字段非得叫fid的话,在mapping里加上“id name:'fid'” |
|
Aaron5
2011-11-04
也就是说grails的domain默认都有一个id字段存在着吗? 有没有办法将id字段去除掉(比如想version false)? 如果是个我已存在的表中没有id或者是联合主键怎么处理。希望帮忙解疑下,谢谢。官网文档似乎没有细说ID和version的问题 |
|
kidli
2011-11-07
id是一定要的(当然名称、形式可以多变),不需要的话,不闻不问让他自生自灭不就够了。
grails文档里有说联合主键(见Composite Primary Keys一章),不过这并不推荐这么做,不够详细的话google一下,英文资料不少,反正比较罗嗦。 个人倾向于使用constraints的unique来创建唯一索引。 |
|
zeeeitch
2011-11-23
|