2012-04-03 4 views
0

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

Должен ли я сделать объект пользователя objekt и, кроме того, содержать список @OneToMany с этими объектами? Или что лучше всего подходит для таких вещей в целом?

Tyvm!

ответ

0

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

Рассмотрим 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; 
    } 
} 
+0

Это действительно очень полезно для начала работы. tyvm !! - Еще один вопрос: когда я сохраняю Item, пользователь должен быть установлен уже в явном виде. Как настроить пользователя? Вернее: как я могу сохранить пользователя при входе в систему? Я просто беру @Stateful UserManager и извлекаю этого пользователя при сохранении элемента? – membersound

+0

@membersound Вы можете сохранить объект User в HttpSession или использовать JSF-компонент, обработанный сеансом. Если вы используете стандартные механизмы безопасности API сервлета (login config в файле web.xml), вы можете получить имя пользователя, как показано в моем коде: 'externalContext.getUserPrincipal(). GetName()' –

0

Вы может просто добавить атрибут «автор» для каждого объекта и показать только сущности, созданные текущим пользователем:

List<SomeEntity> entities = session.createCriteria(SomeEntity.class) 
      .add(Restrictions.eq("author", currentUser)).list(); 
Смежные вопросы