首先,我正在使用Play框架2.2.2编写一个使用Ebeans的Web应用程序。 我将从代码开始,因为这样可以更容易地解释我的问题:
这是我的模特之一:
@Entity
public class Topic extends Model {
@Id
private String title;
private String description;
@ManyToOne
private User createdBy;
private Integer popular;
@Formats.DateTime(pattern="dd/MM/yyyy")
private Date created;
private boolean over18;
@ManyToMany(cascade = CascadeType.REMOVE)
private List<Tag> tags;
}
模型有这种方法:
/**
* Return the number of opinions that exist on a specific Topic
*/
public int countOpinions() {
return Opinion.find.where().eq("topic", this).findRowCount();
}
这是我的第二个相关模型:
@Entity
public class Opinion extends Model {
@Id
private Long opinionId;
@Constraints.Pattern("pos|neg|neut")
private String type;
@ManyToOne
private Topic topic;
@ManyToOne
private User user;
private int rating;
private String text;
private boolean reported;
@ManyToOne
private Opinion parent;
}
包含此静态方法
public static Model.Finder<Long, Opinion> find = new Model.Finder<Long, Opinion>(Long.class, Opinion.class);
这里我们有HTML中的调用
@topics.map { topic =>
<th scope="col" id="name">@topic.getTitle()</th>
<th scope="col" id="description">@topic.getDescription()</th>
<th scope="col" id="opinions">@topic.countOpinions()</th>
}
问题:
好的,所以countOpinions()无法正常工作。我创建了一些测试值,它应该显示特定测试主题的值2,但它显示值0.我不确定Ebeans如何使用我为自己创建的类型保存这些字段,但afaik它应该像这样工作。
我已经尝试过覆盖模型中的equals方法,因为我认为它可能会被使用,但显然它不是。
每次帮助都是如此。
答案 0 :(得分:1)
我快速测试了,效果很好
private FakeApplication fakeApplication;
@Before
public void setup() {
fakeApplication = fakeApplication(inMemoryDatabase());
start(fakeApplication);
}
@After
public void tearDown() {
stop(fakeApplication);
}
@Test
public void countOpinionsTest() {
// given
Topic topic = new Topic();
topic.setTitle("test");
topic.save();
Opinion opinion1 = new Opinion();
opinion1.setOpinionId((long) 1);
opinion1.save();
Opinion opinion2 = new Opinion();
opinion2.setOpinionId((long) 2);
opinion2.save();
// when
opinion1.setTopic(topic);
opinion1.update();
opinion2.setTopic(topic);
opinion2.update();
// then
assertThat(topic.countOpinions()).isEqualTo(2);
}
你有你的ebean配置集和相应包中的实体(这里是模型)吗?
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"
ebean.default="models.*"