我的项目中有以下两个模型:
@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
我遇到的问题是我想要查找所有包含tags_name = 'bar'的报告
因此,通过“查询”调用,我应该返回 id
1 和 3 的 报告
。
使用常规方式
Ebean.find(Reports.class)
.where()
.eq("tags_name", "bar")
.findList()
不起作用,因为Reports
模型/表中没有带有tags_name
的字段
我不知道进行该查询调用的代码是什么,因为我对 Ebean 的经验很少。
最佳答案
我从未与此 Play 合作过!框架,但据我了解,它的一部分包含 JPA 实现。在 JPA 中,当查询某些内容时,您应该引用 java 实体字段名称,而不是表本身中的列,即您的查询应该类似于
Ebean.find(Reports.class)
.where()
.eq("tags.name", "bar")
.findList()
可以引用javadoc here开头的例子
希望有帮助
关于java - Play 框架多对多关联访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18153991/