2012-02-12 17 views
0

這是我的表,GameAdminMySQL的3列唯一約束不工作,可能是由於NULL

game_id company_id user_id 
1   5    NULL 
1   5    NULL 
1   NULL   2 
1   NULL   3 
1   NULL   3 

它鏈接的遊戲,可以對其進行編輯(無論是企業或用戶)的實體。

我對所有列的UNIQUE指數,但你可以看到如預期它不工作。

出了什麼問題?是因爲NULL嗎?


我知道我可以使它通過改變結構的工作:

game_id admin_type admin_id 
1   company  5 
1   company  5 
1   user   2 
1   user   3 
1   user   3 

但是,這不符合我的JPA /休眠設置,或者至少是非常不方便的兼容,因爲它不允許我設置這樣的關係:

@ManyToOne(optional=true) 
private User user; 

@ManyToOne(optional=true) 
private Company company; 

回答

1

呵呵,解決辦法是那麼簡單。我分開了約束,所以有一個game_idcompany_id,以及game_iduser_id

0

這是因爲NULL值。他們不被認爲是獨特的。如果在這些字段上沒有外鍵,則可以使用0而不是NULL。

0

如果你知道(我的意思是知道,不猜測),你將永遠不會有超過2個可能的類(用戶/企業),只使用負的ID就在其中。

  • 我知道這是不是1NF
  • 我知道這是哈克
  • 我知道這是不是真的美麗

但恕我直言,這是對「細細的紅線的接受方」。

+0

我不認爲這會奏效。它會違反外鍵約束,並可能跳過Hibernate。無論如何,我已經找到了合適的解決方案:P但是感謝您和我一起思考 – 2012-02-12 14:02:09