2013-03-08 32 views
0

我使用Jersey在NetBeans 7.3中部署RESTful Web服務。 我使用的是Glassfish 3.1.2以及來自MySQL數據庫的數據。 現在我想配置基本認證Glassfish中的BasicAuth的MySQL表格

我跟着一些教程首先,在數據庫中只有3桌,就像這樣: http://jugojava.blogspot.pt/2011/02/jdbc-security-realm-with-glassfish-and.html

和所有的都很好。但現在,我想在我的數據庫中應用它。 表格必須遵循一定的規則,對吧?我試圖創建2個新表格:login_groups(就像在本教程中那樣,本教程中名爲'users'的表是我的表,名爲'login',已經存在)。 但我無法在表login_groups和登錄之間創建外鍵。 我已經在login_groups和groups之間創建了一個,我沒有問題。

這裏是我的代碼表:

登錄

CREATE TABLE `login` (
    `id` mediumint(8) NOT NULL AUTO_INCREMENT, 
    `login` varchar(100) COLLATE utf8_bin NOT NULL, 
    `password` varchar(32) COLLATE utf8_bin NOT NULL, 
    `privileges` enum('system','installer','administrator') COLLATE utf8_bin NOT NULL, 
    `secret_id` varchar(32) COLLATE utf8_bin NOT NULL, 
    `User_id` mediumint(8) unsigned NOT NULL, 
    `isLogged` bit(1) NOT NULL, 
    `Language` enum('Portuguese','English') COLLATE utf8_bin NOT NULL, 
    `deleted` bit(1) NOT NULL, 

    PRIMARY KEY (`id`), 
    UNIQUE KEY `secret_id_UNIQUE` (`secret_id`), 
    KEY `fk_Login_User1` (`User_id`), 
    CONSTRAINT `fk_Login_User1` FOREIGN KEY (`User_id`) REFERENCES `user` (`id`) 
    ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 

CREATE TABLE IF NOT EXISTS `lul`.`groups` (
`group_id` MEDIUMINT(8) NOT NULL , 
`group_name` VARCHAR(45) NOT NULL , 
`group_desc` VARCHAR(45) NULL DEFAULT NULL , 

PRIMARY KEY (`group_id`)) 
ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin; 

login_groups

CREATE TABLE IF NOT EXISTS `lul`.`login_groups` (
    `login_id` MEDIUMINT(8) NOT NULL , 
    `group_id` MEDIUMINT(8) NOT NULL , 

    PRIMARY KEY (`login_id`, `group_id`) , 
    INDEX `fk_login` (`login_id` ASC) , 
    INDEX `fk_groups` (`group_id` ASC) , 
    CONSTRAINT `fk_login` 
    FOREIGN KEY (`login_id`) REFERENCES `lul`.`login` (`id`) 
    ON DELETE NO ACTION ON UPDATE NO ACTION, 
    CONSTRAINT `fk_groups` 
    FOREIGN KEY (`group_id`) REFERENCES `lul`.`groups` (`group_id`) 
    ON DELETE NO ACTION ON UPDATE NO ACTION) 

ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin 

,這是在MySQL時,我試圖表login_groups和登錄之間創建外鍵給出的錯誤是:

執行SQL腳本在服務器 錯誤:錯誤1005: 無法創建表'lul.login_groups'(errno:150)

請注意,我試圖單獨創建外鍵,我可以創建第二個。

你知道我在做什麼錯嗎? 或者你知道另一種使用表進行基本身份驗證的方法嗎?

謝謝

回答

0

所以我跑你的SQL通過我的MySQL副本,我唯一的錯誤是在CREATE TABLE login腳本;它沒有像

CONSTRAINT `fk_Login_User1` FOREIGN KEY (`User_id`) REFERENCES `user` (`id`) 
ON DELETE NO ACTION ON UPDATE NO ACTION 

,我想你已經在別處定義的參照表user

沒有問題,根據表login_groups。你是否試圖用數據改變現有的表,其中數據違反了任何期望的約束[在另一個表中引用的id未在該表中定義]?

+0

感謝理查德,但我已經解決了這個問題以另一種方式,因爲我計算過,其實我不需要login_groups表。是的,我的數據庫中已經有用戶表,並且我的表也已經有了數據。 – user2144555 2013-03-11 09:55:35