我尝试从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;
答案 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”。我知道,听起来很傻,但这对我有用。