【发布时间】:2013-12-18 09:48:53
【问题描述】:
我有一个实体 CheckpointAnswer.java:
@Entity
public class CheckpointAnswer extends Model {
@Id
public Long id;
@Column(length=160,nullable=false)
public String answer;
@ManyToOne
public Checkpoint checkpoint;
public CheckpointAnswer(String answer, Checkpoint checkpoint) {
this.answer = answer;
this.checkpoint = checkpoint;
}
public static Model.Finder<Long, CheckpointAnswer> find =
new Finder<Long, CheckpointAnswer>(Long.class, CheckpointAnswer.class);
}
还有 Checkpoint.java:
@Entity
public class Checkpoint extends Model {
@Id
public Long id;
@Column(length=80,nullable=false)
public String name;
@Column(nullable=false)
public double longitude;
@Column(nullable=false)
public double latitude;
@Column(nullable=false)
public int points;
@Column(length=160,nullable=false)
public String message;
@OneToMany
public List<CheckpointAnswer> possibleAnswers = new ArrayList<CheckpointAnswer>();
@ManyToOne
public Scenario scenario;
public Checkpoint(String name, double longitude, double latitude, int points, String message, List<String> answers, Scenario scenario) {
this.name = name;
this.longitude = longitude;
this.latitude = latitude;
this.points = points;
this.message = message;
this.scenario = scenario;
for(String answer: answers) {
CheckpointAnswer ca = new CheckpointAnswer(answer, this);
ca.save();
possibleAnswers.add(ca);
}
}
public static Model.Finder<Long, Checkpoint> find =
new Finder<Long, Checkpoint>(Long.class, Checkpoint.class);
public void addPossibleAnswer(String answer) {
CheckpointAnswer checkpointAnswer = new CheckpointAnswer(answer, this);
checkpointAnswer.save();
this.possibleAnswers.add(checkpointAnswer);
this.update();
}
public static List<Checkpoint> findAssignedTo(Long scenario) {
return find.where()
.eq("scenario.id", scenario)
.findList();
}
}
如何创建一个包含一些CheckpointAnswer 对象的Checkpoint 对象?没有CheckpointAnswer,Checkpoint 就不能存在,反之亦然。
我尝试了您可以在代码中看到的方法,但失败了。我有以下单元测试:
@Test
public void createAndRetrieveCheckpoint() {
new User("bob@gmail.com", "Bob", "secret", "000000000", USER_PRIVILEGE.regular).save();
Scenario scenario = Scenario.create("Scenario 1", false, null, "bob@gmail.com");
List<String> answers = new ArrayList<String>();
answers.add("test answer 1");
new Checkpoint("test checkpoint", 21.456, 10.2, 10, "Test question for the user", answers, scenario).save();
List<Checkpoint> checkpoints = Checkpoint.find.all();
assertNotNull(checkpoints);
assertEquals(1, checkpoints.size());
assertNotNull(checkpoints.get(0).possibleAnswers);
assertEquals(1, checkpoints.get(0).possibleAnswers);
}
结果:
[error] Test models.ModelsTest.createAndRetrieveCheckpoint failed: expected:<1> but was:<BeanList deferred >
【问题讨论】:
-
哪个测试失败了?
assertEquals(1, checkpoints.size());或assertEquals(1, checkpoints.get(0).possibleAnswers);? -
@mantithetical 第二个。
标签: java orm playframework ebean playframework-2.2