0

次の問題があります。「ロール」と多対多の関係を持つ「ユーザー」エンティティがあります。問題は、「ロール」が列挙されている (常に 5 つある) ため、ユーザーをフェッチするたびにそれらをフェッチする必要がないように思われることです (ロールもめったに変更されないため)。どういうわけかロールをメモリに保持し、ユーザーを連れてくるたびにそれらをユーザーにアタッチしたいと思います。ハイバネートでは第 2 レベルのキャッシュが有効になっているため、必要に応じてこれを利用できることに注意してください。誰かがこれに対する解決策を持っていますか?

前もって感謝します

4

1 に答える 1

0

データ モデルを変更できる場合は、テーブル ロールを削除し、多対多テーブルを、ユーザーへの外部キーと、ロールを保持する列 (varchar または数値として) を持つ単純な多対 1 テーブルに変換します。ですが、維持しやすいので varchar を使用することをお勧めします)。次に、このテーブルを次のようにマッピングできます。

@Entity
public class UserRole {
    @ManyToOne
    private User user;
    @Column
    @Enumerated(EnumType.STRING) // depends if column is varchar or number
    private Role role;
}

public enum Role { ROLE1, ROLE2, ROLE3, ROLE4, ROLE5 }

ロール テーブルを削除しない場合でも、ロール ID が 0 から 4 である限り、EnumType.ORDINALマッピング (デフォルト) を使用してこれを行うことができることに注意してください。1 から 5 の場合は、Role列挙の先頭にダミー ロールを追加します。

于 2013-03-10T14:29:56.417 に答える