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

Play Framework Ebean two ManyToMany relations return same data

我的代码如下所示:

@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 注释,否则我最终会为多对多关系使用相同的连接 table。这很好用,我生成了两个 table(开发人员和测试人员)。

我什至能够正确保存数据。设置开发人员 and/or 测试人员然后保存文档实体工作正常。

现在的问题是,当我做类似的事情时:

Document.find.all() 获取可用文档,开发人员和测试人员字段 return 相同的数据,尽管数据库中的数据不同。使用 getDevelopers() 执行 document.getDevelopers()document.getTesters() return 相同的数据总是 隐藏 getTesters() 数据。

这是 Ebean ORM 中的一些 bug/limitation 吗?

我正在使用 Play 2.3.8

显式获取字段returns正确的数据。

像这样定义自己的查找方法:

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

还在想是否有更好的方法...

我找到了一个适合我的解决方案,无需获取其他表,也没有获取异常..

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

@OneToOne(cascade = CascadeType.ALL)
ForeignStories foreignStories = new 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>();
}