2010-09-12 27 views
3

J'ai suivi le tutoriel du moteur de l'application google et la partie qui explique que JDO est fait sur la base d'un livre d'or. Donc, quand ils interrogent la persistance (BigTable je crois) ils sont intéressés à retourner tous les résultats.JDO Google App Engine valider l'utilisateur

J'essaye de l'adapter pour montrer les résultats pour l'utilisateur spécifique mais semble avoir des ennuis avec lui.

UserService userService = UserServiceFactory.getUserService(); 
User user = userService.getCurrentUser(); 
if(user != null) { 
    PersistenceManager pm = PerManFac.get().getPersistenceManager(); 
    String query = "select * from " + Team.class.getName(); 
    List<Team> teamList = (List<Team>) pm.newQuery(query).execute(); 
    if(teamList.isEmpty()) { 

partie de ce que Cest je l'ai à ce jour, je dois adapter ma chaîne de requête à « où l'utilisateur = utilisateur » mais je reçois des questions à chaque fois.

Mon objet équipe ne contient que la clé, l'utilisateur, une chaîne et la date.

Répondre

1

Vous pouvez le faire sans JDOQL. Si un utilisateur n'a qu'une équipe, vous pouvez le modéliser avec un owned one to many relationship qui est bidirectionnel.

@PersistenceCapable 
public class Team { 
    @Persistent(mappedBy = "team") 
    private List<Employee> employees; 
} 

@PersistenceCapable 
public class Employee { 
    @PrimaryKey 
    private String user; 

    @Persistent 
    private Team team; 
} 

Pour obtenir le Employee vous pouvez interroger par email:

UserService userService = UserServiceFactory.getUserService(); 
User user = userService.getCurrentUser(); 

PersistenceManager pm = PMF.get().getPersistenceManager(); 
Employee employee = pm.getObjectById(Employee.class, user.getEmail()); 
Team employee.getTeam(); 

Si un utilisateur peut être dans plusieurs équipes, vous devez utiliser an unowned relationship. D'après votre description, il semble que chaque équipe a un utilisateur (?), Vous pourriez donc vouloir une relation plusieurs-à-plusieurs non-propriétaire. La partie qui n'est pas vraiment documentée est que vous ne pouvez pas utiliser un objet User comme clé primaire (les types possibles pour une clé primaire are quite limited), de sorte que vous finissez souvent par utiliser l'email comme clé primaire. Un objet User peut être un champ, mais pour rendre votre modèle de données cohérent, vous utilisez souvent l'adresse électronique partout pour vous référer à l'utilisateur, ou vous utilisez un objet wrapper comme je l'ai fait ci-dessus.

+0

Je reçois une erreur en utilisant votre méthode de: Exception en convertissant [email protected] en une clé interne. Je pense que cela pourrait venir d'ailleurs dans mon code mais avoir du mal à trouver la source – AphexMunky

+0

Désolé, juste vu votre édition que vous ne pouvez pas utiliser un utilisateur comme une clé primaire – AphexMunky

+0

Merci, résolu mon problème – AphexMunky