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>();
}
我的代码如下所示:
@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>();
}