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