【发布时间】:2018-01-13 04:53:02
【问题描述】:
我有一个名为Video 的@Entity,它包含@ElementCollection 标签:
@Entity
@Table(name = "videos")
public class Video {
@Id private String id;
@ElementCollection
@CollectionTable(name = "video_tags",
joinColumns = {@JoinColumn(name = "video_id")})
private List<LineTag> tags = new ArrayList<>();
@Embeddable
public static class LineTag {
@Column
private String tag;
}
}
我想过滤带有标签的视频,SQL 是这样的
select
v.*
from
videos v
where exists (
select
1
from
video_tags vt
where
vt.video_id= v.id
and
tags2_.tag in ('a', 'b')
)
但我不知道如何使用 JPAQuery 来实现:
JPAQuery<Video> baseQuery = new JPAQuery<Video>(entityManager)
.from(video)
.where(video.tags.any().tag.in("a", "b"))
.fetch();
结果是正确的,但是SQL比较复杂:
select
v.*
from
videos v
where
exists (
select 1
from videos v1
inner join
video_tags vt
on v1.id = vt.video_id
where
v1.id = v.id
and vt.tag in ('a', 'b')
)
是否可以使用 QueryDSL 4 来简化 SQL?
【问题讨论】:
标签: querydsl