2

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

就像在这个问题中一样。所以问题是我应该做些什么来让它加载吗?

但是运行此代码会使一切都按预期进行。

Band.find.all();
System.out.println(user.groups);

这种行为的原因是什么?

PS Domain 类是模型继承者,它保留了很少的静态方法。

4

1 回答 1

3

这是MM关系user.groupsSet<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>AND 内部迭代Set<Band>(可用 as 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()

于 2012-06-27T12:22:41.160 回答