カスタムデータをユーザーにバインドするにはどうすればよいですか? 例:ユーザーログイン>は自分が作成したリスト/アイテムのみを表示できます。カスタムデータをユーザーにバインドしますか?
エンティティユーザーオブジェクトを作成し、さらにこれらのオブジェクトで@OneToManyリストを作成する必要がありますか? 一般的に、このようなものに最適なアプローチは何ですか?
Tyvm!
カスタムデータをユーザーにバインドするにはどうすればよいですか? 例:ユーザーログイン>は自分が作成したリスト/アイテムのみを表示できます。カスタムデータをユーザーにバインドしますか?
エンティティユーザーオブジェクトを作成し、さらにこれらのオブジェクトで@OneToManyリストを作成する必要がありますか? 一般的に、このようなものに最適なアプローチは何ですか?
Tyvm!
ユーザーがログインできるシステムを持ち、自分のものがある場合は、ユーザーの種類のエンティティを使用するのが一般的です。
Item
クラスを考えてみましょう:
@Entity
public class Item {
@NotNull
@ManyToOne
private User user; // plus getter + setter
}
次に、あなたが特定のユーザーからのアイテムのリストを取得:JSFで
String query = "SELECT i FROM Item i WHERE i.user = :user";
List<Item> items = entityManager.createQuery(query)
.setParameter("user", user) // where 'user' is the current user
.getResultList;
そして例豆:
public class ItemsBean implements Serializable {
private User user;
private List<Item> items;
public User getUser() {
if (user == null) {
ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
Principal principal = ctx.getUserPrincipal();
user = ... // load user: username = principal.getName()
}
return user;
}
public List<Item> getItems() {
if (items == null) {
User user = getUser();
List<Item> = ... // load items as shown above
}
return items;
}
}
あなたは各エンティティに「作成者」属性を追加して、現在のユーザーによって作成されたエンティティのみを表示できます。
List<SomeEntity> entities = session.createCriteria(SomeEntity.class)
.add(Restrictions.eq("author", currentUser)).list();
これは実際に始めるのに本当に役立ちます。 tyvm !! - もう一つ質問:私がアイテムを永続させるとき、明白な範囲のユーザーは既に設定されていなければなりません。ユーザーを設定するにはどうすればよいですか?代わりに、ログインが行われたときにユーザーを保存するにはどうしたらいいですか? @Stateful UserManagerを使用してアイテムを永続化するときにこのユーザーを取得しますか? – membersound
@ mememound UserオブジェクトをHttpSessionに格納するか、セッションスコープのJSF Beanを使用できます。サーブレットAPI(web.xmlファイルのログイン設定)の標準的なセキュリティー・メカニズムを使用している場合は、自分のコードに表示されているようにユーザー名を取得できます: 'externalContext.getUserPrincipal()。getName()' –