Привязать пользовательские данные к пользователю? - PullRequest
0 голосов
/ 03 апреля 2012

как я могу привязать пользовательские данные к пользователю?Например, пользователь, входящий в систему>, может видеть только те списки / элементы, которые он создал сам.

Нужно ли создавать объект Entity User и дополнительно включать в него список @OneToMany с этими объектами?Или какой подход лучше всего подходит для таких вещей вообще?

Tyvm!

Ответы [ 2 ]

0 голосов
/ 03 апреля 2012

Вы можете просто добавить атрибут 'author' для каждой сущности и показать только сущности, созданные текущим пользователем:

  List<SomeEntity> entities = session.createCriteria(SomeEntity.class)
            .add(Restrictions.eq("author", currentUser)).list();
0 голосов
/ 03 апреля 2012

Обычной практикой является создание сущности типа User, если у вас есть система, в которой пользователь может войти в систему и имеет свои собственные вещи.

Рассмотрим класс Item:

@Entity
public class Item {

    @NotNull
    @ManyToOne
    private User user;  // plus getter + setter

}

Затем вы получаете список предметов от конкретного пользователя:

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;

И пример Bean в JSF:

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;
    }
}
...