我有一些像这样的实体(post
与tags
相关联的一些实体):
@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有一个我错过的功能?