这里有Play Framework 2的一些麻烦。 有两个类:
@Entity
public class User extends Domain {
@Id
public Long id;
public String name;
public String surname;
public String phoneNumber;
@Lob
public String comment;
@ManyToMany
public Set<Band> groups = new HashSet();
}
@Entity
public class Band extends Domain {
@Id
public Long id;
public String name;
@Lob
public String comment;
@ManyToMany(mappedBy="groups")
public Set<User> users = new HashSet();
}
访问User.groups的问题。做
System.out.println(user.groups);
返回以下内容:
BeanSet延期
与this问题完全一样。所以问题是我应该做些什么来加载它?
但运行此代码会使所有内容都符合预期。
Band.find.all();
System.out.println(user.groups);
这种行为的原因是什么?
P.S。 Domain类是Model继承者,它保留了很少的静态方法。
答案 0 :(得分:3)
这是MM关系,因此user.groups
是Set<Band>
,而不仅仅是Band
类型。你需要通过它迭代......
首先,您需要在课程中创建Finder
(如果您还没有):
User:
public static Finder<Long, User> find
= new Finder<Long, User>(Long.class, User.class);
Band:
public static Finder<Long, Band> find
= new Finder<Long, Band>(Long.class, Band.class);
接下来,您需要获取并迭代allUsers为List<User>
并在内部迭代Set<Band>
(以user.groups
提供):
List<User> allUsers = User.find.all();
for (User user : allUsers) {
Logger.info("User's name is " + user.name);
for (Band group : user.groups) {
Logger.info(user.name + " in group " + group.name);
}
}
当然,当你找到单Band
即。使用Band.find.byId(1L)
,您不需要迭代它。
不要忘记导入Logger
:
import play.Logger;
这比System.out.println()