2012-02-02 5 views
1

私のプロジェクトでは、SpringをHibernateと組み合わせて使用​​しています。手動で計算されたフィールド(休止状態のPOJO)

は、私は、クロステーブルを介してROLEに関連し、順番にROLEテーブルがクロステーブルを介して再びPERMISSIONテーブルに関連しているUSERテーブルを持っていると仮定します。したがって、各ユーザーは複数の役割を持つことができ、各役割には複数の権限があり、異なる役割間で共有することができます。 ORMでは私はこのようなユーザー・クラスがあります:

class User { 
    // blah blah properties 

    @ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) 
    @JoinTable(name="USER_ROLE", 
     joinColumns={@JoinColumn(name = "USER_ID", nullable = false, updatable = false)}, 
     inverseJoinColumns={@JoinColumn(name = "ROLE_ID", nullable = false, updatable = false)}) 
    private Set<Roles> roles; 
} 

を今私が何をしたい文字列(List<String> permissions)など、ユーザーの権限の一覧を含むUser Bean内の別のプロパティを持つことです。私のためにこれを行う最も簡単な方法は、プロパティがポピュレートされた直後にUserオブジェクトのいくつかのメソッドを呼び出すことが可能な場合です。このメソッドは、ロールの上でforを実行し、次にアクセス権を介してメソッドを実行し、ユーザーオブジェクト内のアクセス許可のリストに追加します。

多分、この厳密なケースのために休止状態/ばねが何かを提供するでしょうか?

P.S. 私はこれをGoogleで試しましたが、失敗しました。

+1

これをオンデマンドで行う 'User'メソッドを追加するだけです。 – skaffman

+0

私はすでにそれをやっているが、それは私のために十分にきちんとしていない:)私はgetterメソッドをチェックしている場合は、許可リストがnullであり、私はそれを設定しています。私はよりクリーンなソリューションがあるはずだと思います。 また、私は、休止状態のマネージドBeanをネットワーク経由で転送されているシリアライズ可能なBeanに変換する特別なライブラリを使用しています。このlibは、getterメソッドを使用してBeanのプライベートプロパティにアクセスすることができます。 –

+1

@PostLoadライフサイクルリスナーはあなたが望むものですか? http://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/listeners.html –

答えて

2

私は@PostLoad callbackと思っています。エンティティがロードされた直後に計算や変更を行い、アクセス権リストを作成することができます。