dea*_*mon 9 java sql hibernate jpa jpql
我想在其标签集中找到包含所有给定标签的项目.
以下是简化类:
@Entity
class Item {
@ManyToMany
var tags: java.util.Set[Tag] = new java.util.HashSet[Tag]()
}
@Entity
class Tag {
@ManyToMany(mappedBy="tags")
var items: java.util.Set[Item] = new java.util.HashSet[Item]
}
Run Code Online (Sandbox Code Playgroud)
如果我这样试试
select distinct i
from Item i join i.tags t
where t in (:tags)
Run Code Online (Sandbox Code Playgroud)
我得到包含任何给定标签的项目.这并不奇怪,但我想要包含所有给定标签的Items .所以我反过来试试:
select distinct i
from Item i join i.tags t
where (:tags) in t
Run Code Online (Sandbox Code Playgroud)
我收到错误消息org.hibernate.exception.SQLGrammarException: arguments of row IN must all be row expressions.如果tags仅包含单个标记,则它可以工作,但是失败的情况不止于此.
我怎样才能在JPQL中表达这一点?
dea*_*mon 16
诀窍是使用计数:
select i from Item i join i.tags t
where t in :tags group by i.id having count(i.id) = :tagCount
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2094 次 |
| 最近记录: |