Play Framework Ebean两个ManyToMany关系返回相同的数据

时间:2015-06-19 10:03:31

标签: playframework playframework-2.2 playframework-2.3 ebean

我的代码如下所示:

@Entity
public class Document extends Model
{
    @Id
    private Long id;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "developers")
    private Set<Tester> developers = new HashSet<>();

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "testers")
    private Set<Tester> testers = new HashSet<>();
}

我正在使用JoinTable注释,否则我最终会使用相同的连接表来获得多对多关系。这很好用,我生成了两个表(开发人员和测试人员)。

我甚至可以正确保存数据。设置开发人员和/或测试人员,然后保存文档实体正常工作。

现在问题在于我做的事情:

Document.find.all()为了获取可用的文档,开发人员和测试人员字段返回相同的数据,尽管数据库中的数据不同。执行document.getDevelopers()document.getTesters()会使用getDevelopers()始终隐藏 getTesters()数据来返回相同的数据。

这是Ebean ORM的一些错误/限制吗?

我正在使用Play 2.3.8

2 个答案:

答案 0 :(得分:1)

显式获取字段会返回正确的数据。

只需定义自己的find方法:

public static List<Document> findAll() {
    return Ebean.find(Document.class)
                .fetch("developers")
                .fetch("testers")
        .findList();
}

仍然想知道是否有更好的方法......

答案 1 :(得分:0)

我发现一个适用于我的解决方案,无需获取其他表,也没有异常..

而是使用列表本身声明一个包含列表的实体。

@OneToOne(cascade = CascadeType.ALL)
ForeignStories foreignStories = new ForeignStories();

ForeignStories是..

@Entity
@Table(name="foreign_stories")
@SuppressWarnings("serial")
public class ForeignStories extends Model {
    @Id
    @NotNull
    Long id;

    @ManyToMany(cascade = CascadeType.ALL)
    List<Story> foreignStories = new ArrayList<Story>();
}