1

我正在尝试在 play 2.0 中实现 play 1.0 中的 yabe 教程

目前我被困在标记功能上:http ://www.playframework.com/documentation/1.2.3/guide6

本质上问题是这样的:

我有一个 Post 类,每个 Post 对象可以有多个与该类关联的标签:

@ManyToMany(cascade=CascadeType.PERSIST)
public Set<Tag> tags;

我想编写一个函数,给定一个标签数组,当且仅当所有标签都存在于 Post 对象中时,它将返回一个 Post 列表。

单元测试如下:

    @Test
public void testTags() {
    // Create a new user and save it
    SuperUser.setInstance("bob@gmail.com", "secret", "Bob").save();

    SuperUser bob = SuperUser.getInstance();

    // Create a new post
    Post bobPost = new Post(bob, "Hello world","My first post");
    bobPost.save();

    Post anotherBobPost = new Post(bob, "Hello world", "Hop");
    anotherBobPost.save();

    // Well
    assertEquals(0, Post.findTaggedWith("Red").size());

    // Tag it now
    bobPost.tagItWith("Red").tagItWith("Blue").save();
    anotherBobPost.tagItWith("Red").tagItWith("Green").save();

    // Check
    assertEquals(2, Post.findTaggedWith("Red").size());
    assertEquals(1, Post.findTaggedWith("Blue").size());
    assertEquals(1, Post.findTaggedWith("Green").size());

    // Checks for multiple tag params
    assertEquals(1, Post.findTaggedWith("Red", "Blue").size()); //Fail -  Actual: 0
    assertEquals(1, Post.findTaggedWith("Red", "Green").size());
    assertEquals(0, Post.findTaggedWith("Red", "Green", "Blue").size());
    assertEquals(0, Post.findTaggedWith("Green", "Blue").size());

    SuperUser.removeSuperUser();

}

我目前的实现如下:

    public static List<Post> findTaggedWith(String... tags) {

    ExpressionList<Post> expAcc = Post.find.fetch("tags").where().conjunction();

    for( String tag : tags){

        expAcc = expAcc.eq("tags.name", tag);

    }

    return expAcc.endJunction().findList();
}

我不知道下一步该做什么,因为我很暴力地强迫这个并且无处可去:(

谢谢!

4

2 回答 2

1

尝试打开 EBean SQL 日志记录。查看 EBean 正在执行的 SQL 语句非常有帮助。

看到这个 Stackoverflow 问题

于 2013-10-16T13:38:56.667 回答
0

你真的很亲近。问题出在你们的关系上。你在Post课堂上想要的是这样的:

@OneToMany(cascade=CascadeType.PERSIST, mappedBy = "post")
public Set<Tag> tags;

然后在您的Tag班级中,添加以下内容:

@ManyToOne()
public Post post;

根据您的数据库架构与您的模型类的匹配程度,您可能需要也可能不需要尝试添加@JoinColumn注释。

这显示了 Ebean 的预期关系。One (Post) to Many (Tags)在帖子模型中,Many (Tags) to One (Post)在标签模型中。

于 2014-03-12T04:30:20.390 回答