JPA"选择新的"具有manytomany关系的特性:构造函数签名中的数组

时间:2017-10-11 07:01:32

标签: java hibernate jpa hql jpql

我有一些像这样的实体(posttags相关联的一些实体):

@Entity
public class Post {

  @GeneratedId
  public Long id;

  @ManyToMany(cascade=CascadeType.PERSIST, fetch = FetchType.LAZY)
  public Set<Tag> tags = new HashSet<Tag>();

  ...
}

@Entity
public class Tag {

  @GeneratedId
  public Long id;
  public String name;

}

我必须提出一些请求,这些请求会返回数百个过滤标签的帖子。

到目前为止,我已经使用标准查询返回一些Post实体,然后访问myPost.tags来创建我的POJO。

这非常耗时,因为每次创建POJO时,我都会调用myPost.tags来请求获取它们。我认为使用select new这样的功能是个好主意:

select distinct new PostDTO(p.id, t) from Post p left outer join p.tags as t where ...

public class PostDTO {
   public PostDTO(Long id, Tag[] tags) {...}
}

不幸的是,由于JPQL: Receiving a Collection in a Constructor Expression,标签无法作为数组传递。

所以我的问题:我该怎么办?我是否必须更改架构?或JPA有一个我错过的功能?

0 个答案:

没有答案