【发布时间】:2018-09-06 00:22:00
【问题描述】:
我有如下所述的三个课程。我正在尝试创建一个规范来过滤链接表中匹配的数据。
public class Album {
private Long id;
private List<AlbumTag> albumTags;
}
public class Tag {
private Long id;
private String category;
}
public class AlbumTag{
private Long id;
private Album album;
private Tag tag;
}
在上面给出的架构中,我试图找到的是专辑表中所有专辑的列表,其中包含 AlbumTag 中的链接。我要实现的SQL,不必相同,如下
select *
from Album A
where (A.Id in (select [AT].AlbumId
from AlbumTag [AT]))
到目前为止我尝试过但不起作用的方法当然如下
public class AlbumWithTagSpecification implements Specification<Album> {
@Override
public Predicate toPredicate(Root<Album> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
final Subquery<Long> personQuery = cq.subquery(Long.class);
final Root<Album> album = personQuery.from(Album.class);
final Join<Album, AlbumTag> albumTags = album.join("albumTags");
personQuery.select((albumTags.get("album")).get("id"));
personQuery.where(cb.equal(album.get("id"), (albumTags.get("album")).get("id")));
return cb.in(root.get("id")).value(personQuery);
}
}
【问题讨论】:
标签: java spring spring-boot spring-data-jpa jpa-2.0