0

我有一个用户登录的网络应用程序。我希望用户能够添加朋友(以社交网络风格)。但是,我不确定如何使用 play 来解决这个问题。当我转到视图时,会引发空指针异常。

这是我尝试过的

@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();
    }
}

这是视图:

@(friends: List[User])

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

为了尝试测试这一点,当应用程序启动时,我创建了两个用户并与他们成为朋友。

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();
        }
    }
}

以下是控制器调用视图的方式:

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

所以我的问题是,为什么我的 ArrayList 在声明时初始化时总是为空?

4

1 回答 1

1

您正在尝试在数据库中存储列表,Play 不支持该列表。看看:不支持@ElementCollection

当您想使用“普通”JPA 而不是 Play 中的 ebean 时,这是可能的

@ElementCollection
List<String> stuff;

但是不可能存储复杂的对象,例如您的“朋友”对象作为数据库中的朋友列表。这是您需要关联的地方。在这种情况下,多对多可能是要搜索的正确关键字。 播放示例@ManyToMany

于 2014-05-13T18:26:53.030 回答