Ebean Play框架2多对多关联加载

时间:2012-06-27 11:18:53

标签: playframework-2.0 ebean

这里有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继承者,它保留了很少的静态方法。

1 个答案:

答案 0 :(得分: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>并在内部迭代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()

更好