1

NetBeans 6.7 Beta を使用して、MySQL (バージョン '5.0.45-log') データベースからエンティティ クラスを作成しています。NetBeans はほとんどのテーブルを受け入れますが、「主キーがない」と言って、特定のテーブルを一貫して拒否します (パターンはわかりません)。すべてのテーブルは InnoDB エンジンを使用しています。すべてのテーブルには、1 つ以上の列の主キーがあります。MySQL クエリ ブラウザと NetBeans の内部データベース ナビゲータはどちらも、実際にはすべてのテーブルに主キーがあることに同意しています。調子はどう?

以下は、不適切なテーブルを生成するスクリプト スニペットです。

-- -----------------------------------------------------
-- Table `beamline`.`rq_requests`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `beamline`.`rq_requests` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `facility_id` INT NOT NULL ,
  `schedule_id` INT NOT NULL ,
  `experiment_id` INT NOT NULL ,
  `person_id` INT NOT NULL ,
  `shift_per_block` INT NOT NULL ,
  `block_count` INT NOT NULL ,
  `other_requirment` VARCHAR(1023) NULL ,
  `submitted` BOOLEAN NOT NULL ,
  `date_modified` DATETIME NOT NULL ,
  `date_created` DATETIME NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_rq_requests_xa_facilities` (`facility_id` ASC) ,
  INDEX `fk_rq_requests_xa_schedules` (`schedule_id` ASC) ,
  INDEX `fk_rq_requests_eec_exp_toc` (`experiment_id` ASC)
# ,INDEX `fk_rq_requests_eec_members` (`person_id` ASC)
 ,CONSTRAINT `fk_rq_requests_xa_facilities`
    FOREIGN KEY (`facility_id` )
    REFERENCES `beamline`.`xa_facilities` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
 ,CONSTRAINT `fk_rq_requests_xa_schedules`
    FOREIGN KEY (`schedule_id` )
    REFERENCES `beamline`.`xa_schedules` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
 ,CONSTRAINT `fk_rq_requests_eec_exp_toc`
    FOREIGN KEY (`experiment_id` )
    REFERENCES `beamline`.`eec_exp_toc` (`exp_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
# ,CONSTRAINT `fk_rq_requests_eec_members`
#    FOREIGN KEY (`person_id` )
#    REFERENCES `beamline`.`rq_questions` (`admin_uid` )
#    ON DELETE NO ACTION
#   ON UPDATE NO ACTION
)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `beamline`.`rq_questions_facilities`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `beamline`.`rq_questions_facilities` (
  `facility_id` INT NOT NULL ,
  `question_id` INT NOT NULL ,
  PRIMARY KEY (`facility_id`, `question_id`) ,
  INDEX `fk_req_faciliy_current_question_req_question` (`question_id` ASC) ,
  INDEX `fk_rq_questions_facilities_xa_facilities` (`facility_id` ASC),
  CONSTRAINT `fk_req_faciliy_current_question_req_question`
    FOREIGN KEY (`question_id` )
    REFERENCES `beamline`.`rq_questions` (`id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_rq_questions_facilities_xa_facilities`
    FOREIGN KEY (`facility_id` )
    REFERENCES `beamline`.`xa_facilities` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
 )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `beamline`.`rq_questions_supressed`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `beamline`.`rq_questions_suppressed` (
  `facility_id` INT NOT NULL ,
  `question_id` INT NOT NULL ,
  PRIMARY KEY (`facility_id`, `question_id`) ,
  INDEX `fk_req_facility_suppressed_question_req_question` (`question_id` ASC) ,
  INDEX `fk_rq_questions_suppressed_xa_facilities` (`facility_id` ASC),
  CONSTRAINT `fk_req_facility_suppressed_question_req_question`
    FOREIGN KEY (`question_id` )
    REFERENCES `beamline`.`rq_questions` (`id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_rq_questions_suppressed_xa_facilities`
    FOREIGN KEY (`facility_id` )
    REFERENCES `beamline`.`xa_facilities` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

何を与える?前もって感謝します。

4

2 に答える 2

1

クエリ (NB6.5.1) を実行してみましたが、正常に動作しているようです。すべての外部キー制約をコメントアウトする必要があったため、正確な再現ではありません。

それを考えると、すべての参照テーブル (xa_facilities、rq_questions など) を作成していない可能性はありますか? それらは適切に構成されていますか?

将来的には、リレーショナル制約を別々のスクリプトに分けて、すべてのテーブルがそこにある後にそれらを作成していることを常に確認できるようにすることをお勧めします。

于 2009-05-10T10:38:16.857 に答える
1

問題が解決しました; xa_facilities の外部キーは INT(11) でしたが、xa_facilities の主キーは INT(4) でした。当たり前!

于 2009-05-08T22:21:02.130 に答える