2

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

@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 关联,所以玩!自动在我的 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所以通过那个“查询”电话,我应该回来id和 3。

使用传统的方式

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

不起作用,因为模型/表tags_name中没有这样的字段Reports

我不知道进行该查询调用的代码是什么,因为我对 Ebean 的经验很少。

4

1 回答 1

4

我从来没有和这个 Play 合作过!框架,但据我了解,其中一部分包含 JPA 实现。在 JPA 中查询某些内容时,您应该引用 java 实体字段名称,而不是表本身中的列,即您的查询应该类似于

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

您可以在此处参考 javadoc 开头的示例

希望有帮助

于 2013-08-09T20:01:36.847 回答