Play Framework ManyToMany Association Access

时间:2013-08-09 19:12:02

标签: java playframework playframework-2.1 ebean

我的项目中有以下两个模型:

@Entity
public class Reports extends Model{
    @Id
    @GeneratedValue
    public int id;
    @ManyToMany(cascade = CascadeType.ALL)
    public List<Tags> tags;

@Entity
public class Tags extends Model{
    @Id
    public String name;
    @ManyToMany(cascade = CascadeType.ALL)
    public Reports reports;

由于这两个实体都有@ManyToMany关联,Play!在我的PostgreSQL数据库中自动创建一个表:

create table reports_tags (
  reports_id                     integer not null,
  tags_name                      varchar(255) not null,
  constraint pk_reports_tags primary key (reports_id, tags_name))
;

以下是reports_tags应该是什么样子的示例数据:

reports_id     tags_name
     1            pie
     1            bar
     1            line
     3            plot
     3            bar
     4            scattered
     4            plot

我遇到的问题是我想要find all reports where tags_name = 'bar'

因此,通过该“查询”调用,我应该使用reports 1和3返回id

使用传统方式

Ebean.find(Reports.class)
    .where()
    .eq("tags_name", "bar")
    .findList()

无效,因为tags_name型号/表格中没有Reports的此类字段

由于我对Ebean的经验很少,我不知道该查询调用的代码是什么。

1 个答案:

答案 0 :(得分:4)

我从未使用过这个游戏!框架,但据我所知,它的一部分包含一个JPA实现。在JPA中查询时你应该引用java实体字段名,而不是表本身中的列,即你的查询应该是

Ebean.find(Reports.class)
.where()
.eq("tags.name", "bar")
.findList()

您可以参考javadoc here

开头的示例

希望有所帮助