2011-08-16 10 views
0

こんにちは私は2つのテーブルを持っています:役割と権限。役割には名前などがあります。パーミッションにはid、idrole、string sname、boolean bcanmodifyがあります。 (ロールと許可の間に多くの関係があります)関連テーブルのフィールドをマップに結合する

私はRoleのHibernateeエンティティクラスを1つしか持たず、キーがreatedパーミッションのsname値になり、値がbcanmodifyの値になるマップを持っていたいと思います。それは可能ですか?どのアノテーションを使用する必要がありますか?

答えて

1

以下の方法は私にとってはうまくいくと私は信じています。以下のコードはエンティティロールに入り、エンティティのパーミッションが定義されている必要はありません。ただし、マップキーとして使用する列には、テーブルに定義されている一意の制約が必要です。ここでは、アクセス許可テーブル内で一意のsname値を持つ必要があります。

@ElementCollection 
@CollectionTable(name="permissions",joinColumns= @JoinColumn(name="role_id",referencedColumnName="role_id")}) 
@MapKeyColumn(name="sname") 
@Column(name="bcanmodify") 
private Map<String,Boolean> permissions; 
+0

ペアidrole-名前は十分でしょうか? – Sebastian

+0

はい。それだけで十分でしょう。同一のロールに対して複数のsname値が何度も出現することはないため、実際にマップキーを一意にすることができます。 – firefox784

0

AFAIKの中で最も近いのは、RoleエンティティにMap<String, Permission>があることです。

@OneToMany(mappedBy = "role") 
@MapKey(name = "name") 
private Map<String, Permission> permissions; 
関連する問題