2012-04-03 6 views
0

Wie kann ich benutzerdefinierte Daten an einen Benutzer binden? Bsp: Der Benutzer meldet sich an> kann nur Listen/Elemente sehen, die er selbst erstellt hat.Benutzerdefinierte Daten an einen Benutzer binden?

Muss ich ein Entity User-Objekt erstellen und es weiterhin eine @OneToMany-Liste mit diesen Objekten enthalten? Oder was ist der beste Ansatz für solche Dinge im Allgemeinen?

Tyvm!

Antwort

0

Es ist üblich, eine Benutzer-Art von Entität zu haben, wenn Sie ein System haben, auf dem sich ein Benutzer anmelden kann und über eigene Sachen verfügt.

eine Item Klasse vor:

@Entity 
public class Item { 

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

} 

Dann erhalten Sie eine Liste der Elemente von einem bestimmten Benutzer:

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; 

und ein Beispiel Bean in 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

Dies ist wirklich sehr hilfreich, um loszulegen. Tyvm !! - Noch eine Frage: Wenn ich ein Item persistiere, muss der Benutzer in offently bereits gesetzt sein. Wie stelle ich den Benutzer ein? Oder besser: Wie kann ich den Benutzer bei der Anmeldung speichern? Nehme ich einfach einen @Stateful UserManager und erhalte diesen Benutzer, wenn er ein Element persistiert? – membersound

+0

@membersound Sie können das User-Objekt in der HttpSession speichern oder eine Session-JSF-Bean verwenden. Wenn Sie die Standard-Sicherheitsmechanismen der Servlet-API (Anmeldekonfiguration in der web.xml-Datei) verwenden, können Sie den Benutzernamen wie in meinem Code gezeigt abrufen: 'externalContext.getUserPrincipal(). GetName()' –

0

Sie kann zu jeder Entität einfach ein Attribut 'author' hinzufügen und nur Entitäten anzeigen, die vom aktuellen Benutzer erstellt wurden:

List<SomeEntity> entities = session.createCriteria(SomeEntity.class) 
      .add(Restrictions.eq("author", currentUser)).list();