2013-05-25 2 views
0

J'ai une application Web dans laquelle les utilisateurs se connectent. Je veux que les utilisateurs puissent ajouter des amis (dans un style de réseau social). Cependant, je ne suis pas sûr de savoir comment s'y prendre en utilisant le jeu. Lorsque je vais à la vue, une exception de pointeur null est levée.Comment enregistrer une liste d'amis dans Play

Voici ce que j'ai essayé

@Entity 
public class User extends Model { 

    @Id 
    public String username; 
    public String password; 

    public List<User> friends = new ArrayList<User>(); 

    public static Finder<String, User> find = new Finder<String, User>(String.class, User.class); 

    public User(String username, String password){ 
     this.username = username; 
     this.password = password; 
    } 

    public void addFriend(User friend){ 
     friends.add(friend); 
    } 

    public static void befriend(String user1, String user2){ 
     User.find.ref(user1).addFriend(User.find.ref(user2)); 
     User.find.ref(user2).addFriend(User.find.ref(user1)); 

     User.find.ref(user1).save(); 
     User.find.ref(user2).save(); 
    } 
} 

Et voici la vue:

@(friends: List[User]) 

<div id="current_friends"> 
    @for(friend <- friends) { <!--This is the line the error is thrown at--> 
     @friend.username 
    } 
</div> 

Pour essayer et tester ceci, lorsque l'application démarre je crée deux utilisateurs et les lier d'amitié avec.

public class Global extends GlobalSettings { 
    @Override 
    public void onStart(Application app){ 
     // Check if the database is empty 
     if(User.find.findRowCount()==0){ 
      User conor = new User("Conor", "secret"); 
      User jerry = new User("Jerry", "secret"); 

      User.befriend("Conor", "Jerry"); 

      conor.save(); 
      jerry.save(); 
     } 
    } 
} 

Voici comment le contrôleur appelle la vue:

return ok(index.render(User.find.byId(request().username()).friends)); 

Donc ma question est, pourquoi est mon ArrayList toujours nulle quand il est initialisée quand elle est déclarée?

Répondre

1

Vous tentez de stocker une liste dans la base de données, qui n'est pas prise en charge par Play. Jetez un oeil: @ElementCollection not supported

Il est possible que lorsque vous voulez utiliser « plaine » JPA et non la ebean de jeu

@ElementCollection 
List<String> stuff; 

Mais il est impossible de stocker des objets complexes, comme votre « ami » Objet comme une liste d'amis dans la base de données. C'est ici que vous avez besoin Associations Dans ce cas probablement ManyToMany sera le bon mot-clé à rechercher. Play Example @ManyToMany

Questions connexes