我的项目中有以下两个模型:
@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的经验很少,我不知道该查询调用的代码是什么。
答案 0 :(得分:4)
我从未使用过这个游戏!框架,但据我所知,它的一部分包含一个JPA实现。在JPA中查询时你应该引用java实体字段名,而不是表本身中的列,即你的查询应该是
Ebean.find(Reports.class)
.where()
.eq("tags.name", "bar")
.findList()
您可以参考javadoc here
开头的示例希望有所帮助