2011-06-22 6 views
0

私は、休止状態で基本的なタグ付けシステムを実装しようとしています。問題は誰もがマッピングを簡単にするためにTagをサブクラス化していることです。私は、Tagオブジェクトをそれがどのように使用されているかに依存しないようにしたい。タイプに固有のものであってはなりません。しかし、マッピングは非常に困難であることが分かっています。ここに私が達成しようとしていることがあります。ディスクリミネータを使用して1対多のコレクションを結合テーブルでマップする方法

私はタグと接頭辞の2つのクラスから始めています。プレフィックスにはタグのコレクションが含まれます。私は3つのテーブルを持っています。接頭辞、タグおよびタグ付き。タグ付きは接頭辞とタグを結合する表です。列挙には、私がタグ付けする他のオブジェクトがリストされます。これは私がさまざまなタイプをサポートしたい方法です。

それは次のようになります。私は

@OneToMany 
@JoinTable(name = "tagged", joinColumns = { @JoinColumn(name = "object_id") }, inverseJoinColumns = @JoinColumn(name = "id")) 
public List<Tag> getTags() { 
    return tags; 
} 

だから、1対多のマッピングを持っている私のマッピングの心臓部

CREATE TABLE tagged(
tag_id INT(11) NOT NULL, 
object_id INT(11) NOT NULL, 
discriminator ENUM('PREFIX', 'ROOT', 'SUFFIX') 
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 

、質問があり、私はにどのように参加しますディスクリミネータテーブルとその値を設定する? 私は最初に試しました:

@OneToMany 
@JoinTable(name = "tagged", joinColumns = @JoinColumn(name = "object_id"), inverseJoinColumns = @JoinColumn(name = "id")) 
@Where(clause = "discriminator='PREFIX'") 
public List<Tag> getTags() { 
    return tags; 
} 

これは機能しませんでした。 Hibernateはdiscriminatorのタグテーブルを探していました。何か案は?ありがとう!

答えて

1

WhereJoinTable annotationを試しましたか?ドキュメントがあれば、それはあなたが望むことをするはずです。

+0

あなたは男です!それがトリックでした。ご協力ありがとうございました! – matsientst

+0

新しいエントリを追加するときに結合テーブルにディスクリミネータを設定する方法もありますか? – Joern

関連する問題