Tôi muốn tìm các mục có chứa tất cả các thẻ đã cho trong thẻ của chúng được đặt.Tìm các mục có tập hợp chứa tất cả các phần tử của một tập hợp nhất định với jpql
Dưới đây là các lớp học đơn giản:
@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]
}
Nếu tôi thử nó như thế này
select distinct i
from Item i join i.tags t
where t in (:tags)
tôi nhận được vật phẩm chứa bất kỳ các thẻ nhất định. Điều đó không đáng ngạc nhiên, nhưng tôi muốn Các mục có chứa tất cả của các thẻ đã cho. Vì vậy, tôi thử theo cách khác xung quanh:
select distinct i
from Item i join i.tags t
where (:tags) in t
Tôi nhận được thông báo lỗi org.hibernate.exception.SQLGrammarException: arguments of row IN must all be row expressions
. Nó hoạt động nếu tags
chỉ chứa một thẻ duy nhất, nhưng nó không thành công với nhiều hơn thế.
Làm cách nào để diễn đạt điều này trong JPQL?
Vì tôi nghĩ bạn không thể so sánh được với các mảng khác trong chế độ ngủ đông. Tôi nghĩ bạn phải viết lại mã truy vấn sql. –
Truy vấn truy vấn = session.createQuery ("từ Cổ phiếu trong đó stockId trong (: mã)"); query.setParameterList ("mã", idList); –
Tôi đánh giá cao việc bạn đã thể hiện trong câu hỏi của mình về cách bạn nhận được các mục chứa bất kỳ thẻ nào đã cho! Đây là những gì tôi đang tìm kiếm. Tôi cũng có thể xác nhận nó hoạt động với '@ ElementCollection'. –