Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Play Framework 2.1.x上使用YAML填充多人关系_Java_Many To Many_Yaml_Playframework 2.1_Ebean - Fatal编程技术网

Java 如何在Play Framework 2.1.x上使用YAML填充多人关系

Java 如何在Play Framework 2.1.x上使用YAML填充多人关系,java,many-to-many,yaml,playframework-2.1,ebean,Java,Many To Many,Yaml,Playframework 2.1,Ebean,我有以下多(双向)关系: @Entity public class Proposal extends Model { ... @ManyToMany public List<Tag> tags; } @Entity public class Tag extends Model { ... @ManyToMany(mappedBy="tags") public List<Proposal> taggedProposals;

我有以下多(双向)关系:

@Entity
public class Proposal extends Model {
    ...
    @ManyToMany
    public List<Tag> tags;
}

@Entity
public class Tag extends Model {
    ...
    @ManyToMany(mappedBy="tags")
    public List<Proposal> taggedProposals;
}

问题是,当我试图显示提案的
标签
或标签的
taggedProposals
时,ArrayList是空的!我试着使用,但没有成功。正在正确加载和显示所有其他数据

您遇到的问题是因为play使用ebean,而ebean不会自动保存多对多关联

我必须这样解决:

private static void initialData() {
    @SuppressWarnings("unchecked")
    Map<String,List<Object>> all = (Map<String,List<Object>>) Yaml.load("initial-data.yml");

    // Save all roles
    Ebean.save(all.get("roles"));

    // Insert users and for every user save its many-to-many association
    Ebean.save(all.get("users"));
    for(Object user: all.get("users")) {
        Ebean.saveManyToManyAssociations(user, "roles");
    }
}

如果莱昂·雷德利发布的答案是准确的,那么情况就不再如此了! Play不断发展,自2.1版本以来,许多引用列表初始化现在可以工作()!有关其工作原理的示例,请参见User.zones

zones:
    - &zone1 !!models.Zone
        id:                 1
        gtbName:            "ZZ01"
    - &zone2 !!models.Zone
        ...

users:
    - &user4 !!models.User
        id:                 4
        profile:            *profile4
        defaultZone:        *zone3
        zones:
            - *zone1
            - *zone2
            - *zone3

不幸的是,这不起作用。我修改了您的代码,并且在尝试保存关系时得到了NullPointerException。我的yaml()和loader方法()可能需要将CascadeType.PERSIST添加到集合中@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)公共列表角色=newArrayList();我将
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
添加到我的
提案中(相当于您的角色),但问题仍然存在。。。
# Roles
roles:
  - &adminRole !!models.Role
    name: admin

  - &projectleadRole !!models.Role
    name: projectlead

# Users
users:
  - &leonUser !!models.User
    email: leon@domain.com
    roles:
     - *adminRole
     - *projectleadRole
    firstName: Leon
    lastName: Radley
zones:
    - &zone1 !!models.Zone
        id:                 1
        gtbName:            "ZZ01"
    - &zone2 !!models.Zone
        ...

users:
    - &user4 !!models.User
        id:                 4
        profile:            *profile4
        defaultZone:        *zone3
        zones:
            - *zone1
            - *zone2
            - *zone3