java - Play 框架多对多关联访问

标签 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 关联,所以玩吧!自动在我的 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/

相关文章:

java - 如何声明主键都是一对一字段?

javascript - 使用 Play Framework 和 JW Player 嵌入视频

mysql - 如何使用 slick 和 mariadb 将 Array[Byte] 插入二进制数据类型列?

scala - Play Famework 2.1 Websockets 是否有 Comet 适配器?

scala - 如何在 Play 中重复请求!框架2.1?

java - 有关 BlackBerry BrowserField2 的问题

java - 重试失败的 JDBC 连接

java - 默认Java库路径?

java - 处理巨大 Json Http 请求的最佳方法

playframework - 在 Play Framework 2.1.4 中处理空查询