我有以下多对多(双向)关系:
@Entity
public class Proposal extends Model {
...
@ManyToMany
public List<Tag> tags;
}
@Entity
public class Tag extends Model {
...
@ManyToMany(mappedBy="tags")
public List<Proposal> taggedProposals;
}
我想使用 yaml 文件用一些测试数据填充我的数据库(稍后使用简单视图显示)。这是我的 yaml 文件的一部分:
...
- &prop2 !!models.Proposal
id: 2
title: Prop2 title
proposer: *user2
- &prop3 !!models.Proposal
id: 3
title: Prop3 title
proposer: *user3
# Tags
- &tag1 !!models.Tag
name: Tag1 name
desc: Tag1 description
taggedProposals:
- *prop1
- &tag2 !!models.Tag
name: Tag2 name
desc: Tag2 description
taggedProposals:
- *prop2
- *prop3
The problem is that when I try to display a Proposal's tags
or a Tag's taggedProposals
, the ArrayLists are empty! I tried using square brackets and commas https://stackoverflow.com/questions/9715000/manytomany-test-fixtures-yaml-in-play-framework-1-2-x without success. All the other data is being loaded and displayed correctly.
您遇到的问题是因为 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");
}
}
和 yaml 文件:
# Roles
roles:
- &adminRole !!models.Role
name: admin
- &projectleadRole !!models.Role
name: projectlead
# Users
users:
- &leonUser !!models.User
email: [email protected] /cdn-cgi/l/email-protection
roles:
- *adminRole
- *projectleadRole
firstName: Leon
lastName: Radley
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)