NetBeans中的“无法添加,因为它没有主键”错误

时间:2013-08-08 11:11:17

标签: mysql jsp netbeans

我尝试从MySQL数据库创建一个实体类。 Netbeans中的向导给出错误消息“无法添加,因为它没有主键”。但我的桌子上有一把钥匙。这似乎是其他人在这个论坛中遇到的错误:

https://netbeans.org/bugzilla/show_bug.cgi?id=167389

我已经在线程中尝试了这些建议,但还没有让它工作。我错过了什么?我可以强制Netbeans导入Entity类吗?

我正在使用NetBeans 7.3

这是我的表:

CREATE  TABLE IF NOT EXISTS `estelle`.`FrasVal` (
`ID` INT(11) NOT NULL AUTO_INCREMENT ,
`Varde` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`Kommentar` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL ,
`RegistreratDatum` DATETIME NOT NULL ,
`FrasFragaSvarAlternativ_ID` INT(11) NULL ,
`Anvandare_ID` INT(11) NOT NULL ,
`Patient_ID` INT(11) NOT NULL ,
`FrasFraga_ID` INT(11) NOT NULL ,
PRIMARY KEY (`ID`) ,
UNIQUE INDEX `ID_UNIQUE` (`ID` ASC) ,
INDEX `fk_FrasVal_FrasFragaSvarAlternativ1_idx` (`FrasFragaSvarAlternativ_ID` ASC) ,
INDEX `fk_FrasVal_Anvandare1_idx` (`Anvandare_ID` ASC) ,
INDEX `fk_FrasVal_Patient1_idx` (`Patient_ID` ASC) ,
INDEX `fk_FrasVal_FrasFraga1_idx` (`FrasFraga_ID` ASC) ,
CONSTRAINT `fk_FrasVal_FrasFragaSvarAlternativ1`
FOREIGN KEY (`FrasFragaSvarAlternativ_ID` )
REFERENCES `estelle`.`FrasFragaSvarAlternativ` (`ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_FrasVal_Anvandare1`
FOREIGN KEY (`Anvandare_ID` )
REFERENCES `estelle`.`Anvandare` (`ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_FrasVal_Patient1`
FOREIGN KEY (`Patient_ID` )
REFERENCES `estelle`.`Patient` (`ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_FrasVal_FrasFraga1`
FOREIGN KEY (`FrasFraga_ID` )
REFERENCES `estelle`.`FrasFraga` (`ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;

3 个答案:

答案 0 :(得分:2)

  

我已经在线程中尝试了这些建议,但还没有让它工作。

你确定吗?您发布的代码示例未显示。如有必要,请更新您的问题以反映问题的实际状态。


根据the link you provided,可能的(?)解决方法是拼写你的全部小写:

  “让我困难的事情是,出于一些时髦的原因,这个问题   表名必须全部为小写。如果表名混合在一起   如果在反向期间不会发现关系   工程过程。在我的实验中,我发现了   Middlegen文档会对此发出警告,所以我猜这个   Eclipse DALI插件使用了Middlegen。 MySQL引擎   也应该是INNODB。“

https://netbeans.org/bugzilla/show_bug.cgi?id=167389#c11

  

如果你的外键大写,那么问题就会发生   小写表名与引用表的定义不匹配。


我建议(1)使用所有小写表名,(2)确保表引用在外键约束上拼写相同。

CREATE  TABLE IF NOT EXISTS `estelle`.`frasval` (
--                                     ^^^^^^^
 ...

REFERENCES `estelle`.`frasfragasvaralternativ` (`ID` )
--                    ^   ^    ^   ^

您应该也可以在表名中使用下划线_(最终使事情更具可读性!)。如果你有时间做一些实验,请发表你的结论!

答案 1 :(得分:0)

当我收到错误时,我删除了外键,再次添加它们,重启mysql连接并且工作正常

答案 2 :(得分:0)

这是因为字段“ ID”名称上的第一个字符是大写。尝试使用“ id”。我知道,听起来很傻,但这对我有用。