私のプロジェクトでは、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で試しましたが、失敗しました。
これをオンデマンドで行う 'User'メソッドを追加するだけです。 – skaffman
私はすでにそれをやっているが、それは私のために十分にきちんとしていない:)私はgetterメソッドをチェックしている場合は、許可リストがnullであり、私はそれを設定しています。私はよりクリーンなソリューションがあるはずだと思います。 また、私は、休止状態のマネージドBeanをネットワーク経由で転送されているシリアライズ可能なBeanに変換する特別なライブラリを使用しています。このlibは、getterメソッドを使用してBeanのプライベートプロパティにアクセスすることができます。 –
@PostLoadライフサイクルリスナーはあなたが望むものですか? http://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/listeners.html –