2

ここで Play Framework 2 からのちょっとしたトラブル。次の 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 ドメイン クラスは、いくつかの静的メソッドを保持するモデルの継承者です。

4

1 に答える 1

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>ANDとして取得して反復する必要があり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);
    }
}

もちろん、単一のBandie が見つかった場合。反復するBand.find.byId(1L)必要はありません。

以下をインポートすることを忘れないでくださいLogger:

import play.Logger;

よりも優れていますSystem.out.println()

于 2012-06-27T12:22:41.160 に答える