2012-02-12 3 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/Hibernateの設定、または少なくとも非常に不便と互換性がありません私はこのような関係を設定する:

@ManyToOne(optional=true) 
private User user; 

@ManyToOne(optional=true) 
private Company company; 

答えて

1

ああ、解決策はとても簡単です。私は拘束を分割しているので、game_idcompany_id、そしてgame_iduser_idのものがあります。

0

これはNULL値のためです。ユニークなものとはみなされません。これらのフィールドに外部キーがない場合は、NULLの代わりに0を使用できます。

0

あなたが知っている場合は、単にそれらの一つに負のIDを使用し、あなたが2つの以上の可能なクラス(ユーザー/会社)がないことを(と私は意味はない推測を知っています)。私はこれは私が、私はこれは本当に

美しいしかし、私見、これは「シン・レッド・ラインの許容側にあるではありません知っている、これはハック

  • である知っている1NF
  • ではありません知っている

    • "

  • +0

    私はそれがうまくいくとは思わない。それは外部キーの制約に違反し、恐らくHibernateを上回ります。そして、私はすでにとにかく適切な解決策を見つけました:Pしかし、私と考えてくれてありがとう –

    関連する問題