tôi giả sử bạn đang sử dụng một phiên bản của Hibernate mà thực hiện JPA 2.0. Đây là giải pháp JPA 2.0 có thể hoạt động với bất kỳ triển khai thực hiện nào.
Vui lòng chú thích uuids
bằng chú thích @ElementCollection
của JPA. Không sử dụng @CollectionOfElements
của Hibernate như đã đề cập trong một số nhận xét trả lời khác. Cái sau có chức năng tương đương nhưng là being deprecated.
Foobar.java
sẽ xem xét khoảng như thế này:
@Entity
public class Foobar implements Serializable {
// You might have some other id
@Id
private Long id;
@ElementCollection
private List<String> uuids;
// Getters/Setters, serialVersionUID, ...
}
Đây là cách bạn có thể xây dựng một CriteriaQuery
để chọn tất cả Foobar
s mà uuids
chứa "abc123".
public void getFoobars() {
{
EntityManager em = ... // EM by injection, EntityManagerFactory, whatever
CriteriaBuilder b = em.getCriteriaBuilder();
CriteriaQuery<Foobar> cq = b.createQuery(Foobar.class);
Root<Foobar> foobar = cq.from(Foobar.class);
TypedQuery<Foobar> q = em.createQuery(
cq.select(foobar)
.where(b.isMember("abc123", foobar.<List<String>>get("uuids"))));
for (Foobar f : q.getResultList()) {
// Do stuff with f, which will have "abc123" in uuids
}
}
Tôi đã tạo chương trình chứng minh khái niệm khép kín khi chơi với trò chơi này. Tôi không thể đẩy nó ra ngay bây giờ. Xin vui lòng bình luận nếu bạn muốn POC đẩy github.
Nguồn
2010-04-29 22:57:35
Đã thử với hibernate 3.6.7-Final và không hoạt động (nó có vẻ là một lỗi trong hibernate). – greuze