这可能看起来像一个非常基本的问题,但我有一个模型(用户),我想存储一个字符串的ArrayList(他们是其他用户的id)。我像这样声明List:
public List<String> friends = new ArrayList<String>();
在我向数组添加条目后,我保存了用户。但是当我尝试使用它时,朋友总是空的。有没有特定的方法来保存ArrayList?任何帮助将不胜感激。
我的模特:
@Entity
public class User extends Model {
@Id
public String username;
public String password;
public List<String> friends = new ArrayList<String>();
public static Finder<String, User> find = new Finder<String, User>(String.class, User.class);
// Constructor
public User(String username, String password){
this.username = username;
this.password = password;
}
// Methods
public void addFriend(String friend){
friends.add(friend);
}
// Static Methods
public static User authenticate(String username, String password){
return find.where().eq("username", username).eq("password", password).findUnique();
}
public static void befriend(String user1, String user2){
User.find.ref(user1).addFriend(user2));
User.find.ref(user2).addFriend(user1);
User.find.ref(user1).save();
User.find.ref(user2).save();
}
}
控制器方法:
return ok(index.render(
User.find.byId(request().username()).friends,
));
一个非常简单的观点:
@(friends: List[User])
<div id="current_friends">
@for(friend <- friends) {
@friend.username
}
</div>
答案 0 :(得分:1)
您需要使用saveManyToManyAssociations(String fieldname)
“手动”保存关系,例如:
public static void befriend(String userName1, String userName2){
User user1 = User.find.byId(userName1);
User user2 = User.find.byId(userName2);
user1.friends.add(user2);
user2.friends.add(user1);
user1.save();
user2.save();
// here...
user1.saveManyToManyAssociations("friends");
user2.saveManyToManyAssociations("friends");
}
(注意:从我自己的顶部开始编写,请自行调试)
答案 1 :(得分:0)
出现此问题的一个可能原因可能是您的观点:
您视图的第一行是
@(friends: List[User])
用户没有包名,这可能导致空指针异常。 就我而言,我的User bean在模型包下,所以我有以下几行:
@(friends: List[models.User])
答案 2 :(得分:0)
我遇到了完全相同的问题,这就是我修复它的方法(稍作解释)。
实际上,您尝试在DataBase中保存ArrayList(因此大小未定义)。而且显然(并且相当逻辑),Play Framework并不是真的喜欢它;你必须使用注释或瞬态类。我决定使用课堂方式(也因为我不知道如何使用注释来制作子表,所以我没有承担风险,但这不是最好的方式事实上,这是一种可怕的做法。但是,它仍然存在。)
在你的情况下,你可以这样:
@Entity
public class Friends extends Model {
@Id
public Long id;
@Required
public String user1;
@Required
public String user2;
public static Finder<Long, Friends> find = new Finder<Long, Friends>(Long.class, Friends.class);
//Here put your functions, I myself only added an insert method for the moment :
public static void add(String user1, String user2){
Friends f = new Friends();
f.user1 = user1;
f.user2 = user2;
bu.save();
}
}
在您的用户模型中,只需通过此功能将用户保存到彼此的部分更改为
。希望这会有所帮助。
注意:id在这里是因为我喜欢数字ID,随时可以更改它。
注意2:当然,使用@ManyToOne和@OneToMany注释要好得多,但正如我之前所写,我不确切知道它是如何工作的。