【问题标题】:Play Framework Ebean two ManyToMany relations return same dataPlay Framework Ebean 两个多对多关系返回相同的数据
【发布时间】:2015-06-19 10:03:31
【问题描述】:

我的代码如下所示:

@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

【问题讨论】:

  • 这是 EBean 中的一个错误。你也可以看看this post
  • @rtruszk 我实际上在寻找类似的东西,但没有找到。感谢您的信息!

标签: playframework playframework-2.2 playframework-2.3 ebean


【解决方案1】:

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

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

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

还在想有没有更好的方法……

【讨论】:

    【解决方案2】:

    我找到了一个适合我的解决方案,无需获取其他表且不会出现异常。

    而是使用列表本身声明一个持有该列表的实体。

    @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>();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 2018-04-04
      相关资源
      最近更新 更多