我正在使用initial-data.yml將一組樣本數據導入到我在Play 2.0.1上運行的應用程序中。我正在嘗試加載成員,計劃和會員資格。成員和方案導入OK,但成員資格(對成員和方案具有外鍵)只導入列表中的最後一個條目。使用initial-data.yml加載@ManyToOne關聯
這裏是我的初始data.yml文件:
# Members
members:
- !!models.Member
email: [email protected]
name: Mark Zucker
created: null
last_updated: null
- !!models.Member
email: [email protected]
name: Vicky Smith
created: null
last_updated: null
- !!models.Member
email: [email protected]
name: Simon Jones
created: null
last_updated: null
- !!models.Member
email: [email protected]
name: Steve James
created: null
last_updated: null
# Schemes
schemes:
- !!models.Scheme
id: 1
name: Walmart
- !!models.Scheme
id: 2
name: Amazon
- !!models.Scheme
id: 3
name: Outdoors Living
# Memberships
memberships:
- !!models.Membership
membership_id: 1234567890
accrued: 2000
balance: 1000
joined_by: !!models.Member
id: 1
scheme: !!models.Scheme
id: 1
memberships:
- !!models.Membership
membership_id:000
accrued: 10000
balance: 10000
joined_by: !!models.Member
id: 2
scheme: !!models.Scheme
id: 1
這裏是我的模型定義的相關部分:
package models;
import java.util.*;
import play.db.ebean.*;
import play.data.Form;
import play.data.validation.Constraints.*;
import javax.persistence.*;
import models.Membership;
@Entity
public class Member extends Model {
@Id
public Long id;
@Required
public String email;
public String name;
public Date created;
public Date last_updated;
這裏是方案模型的一部分:
@Entity
public class Scheme extends Model {
@Id
public Long id;
@Required
public String name;
以下是會員模型:
@Entity
public class Membership extends Model {
@Id
public Long membership_id;
@Required
@ManyToOne
public Member joined_by;
@Required
@ManyToOne
public Scheme scheme;
public Long accrued;
public Long balance;
下面是Global.java插入方法:
public static void insert(Application app) {
Map<String,List<Object>> all = (Map<String,List<Object>>)Yaml.load("initial-data.yml");
if(Ebean.find(Member.class).findRowCount() == 0) {
Logger.info("Loading members from initial-data.yml");
Ebean.save(all.get("members"));
}
if(Ebean.find(Scheme.class).findRowCount() == 0) {
Logger.info("Loading schemes from initial-data.yml");
Ebean.save(all.get("schemes"));
}
if(Ebean.find(Membership.class).findRowCount() == 0) {
Logger.info("Loading memberships from initial-data.yml");
Ebean.save(all.get("memberships"));
}
Logger.info("Loaded "+Ebean.find(Member.class).findRowCount()+" members");
Logger.info("Loaded "+Ebean.find(Scheme.class).findRowCount()+" schemes");
Logger.info("Loaded "+Ebean.find(Membership.class).findRowCount()+" memberships");
}
我已經關掉登錄計數插入到每個表中的行數,這裏是輸出:
DEBUG - select count(*)
from member t0
INFO - Loaded 4 members
DEBUG - select count(*)
from scheme t0
INFO - Loaded 3 schemes
DEBUG - select count(*)
from membership t0
INFO - Loaded 1 memberships
如您所見,所有成員和方案都已加載,但只加載了一個成員資格。這總是列表中的最後一個(因此上面的initial-data.yml文件中的成員資格000)。如果我交換參賽作品,它仍然是最後一個!
爲了加載initial-data.yml中的所有成員數據,我需要更改哪些內容?
謝謝,是的,這是現在工作! – mstreffo